青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
    Kernel FP的MakeFile可以指定輸出文件、報(bào)告文件以及代碼文件,并且可以繼承其他的MakeFile。首先我們來(lái)看一下MakeFile的例子:

    這是一個(gè)叫Project.txt的MakeFile,繼承自Default.txt和Default2.txt
 1 <kfpProject>
 2   <inherit path="Default.txt"/>
 3   <inherit path="Default2.txt"/>
 4   <code>
 5     <base path="CodeBase\"/>
 6     <include path="CodeA.txt"/>
 7     <include path="CodeB.txt"/>
 8   </code>
 9   <code>
10     <include path="CodeC.txt"/>
11     <include path="CodeD.txt"/>
12   </code>
13   <output path="Output.txt"/>
14   <report path="Report.txt"/>
15 </kfpProject>

    如果一部分代碼放在一個(gè)文件夾下面的話,可以使用code/base來(lái)節(jié)省書寫MakeFile的時(shí)間。讓我們看一下剩下的三個(gè)MakeFile,最后一個(gè)MakeFile被Default.txt和Default2.txt共同繼承:

    Default.txt
 1 <kfpProject>
 2   <inherit path="Library\Library.txt"/>
 3   <code>
 4     <base path="DefBase\"/>
 5     <include path="DefA.txt"/>
 6     <include path="DefB.txt"/>
 7   </code>
 8   <code>
 9     <include path="DefC.txt"/>
10     <include path="DefD.txt"/>
11   </code>
12   <output path="Output.txt"/>
13   <report path="Report.txt"/>
14 </kfpProject>

    Default2.txt
 1 <kfpProject>
 2   <inherit path="Library\Library.txt"/>
 3   <code>
 4     <base path="Def2Base\"/>
 5     <include path="Def2A.txt"/>
 6     <include path="Def2B.txt"/>
 7   </code>
 8   <code>
 9     <include path="Def2C.txt"/>
10     <include path="Def2D.txt"/>
11   </code>
12   <output path="Output.txt"/>
13   <report path="Report.txt"/>
14 </kfpProject>

    他們共同繼承的Library\Library.txt
 1 <kfpProject>
 2   <code>
 3     <base path="LibBase\"/>
 4     <include path="LibA.txt"/>
 5     <include path="LibB.txt"/>
 6   </code>
 7   <code>
 8     <include path="LibC.txt"/>
 9     <include path="LibD.txt"/>
10   </code>
11   <output path="LibOutput.txt"/>
12   <report path="LibReport.txt"/>
13 </kfpProject>

    MakeFile分析器的第一個(gè)作用是解析MakeFile,第二個(gè)作用是生成合并的MakeFile,也就是說(shuō),要將繼承下來(lái)的所有東西進(jìn)行合并,并且為所有路徑制定直接路徑而不是相對(duì)路徑。讓我們看看Project.txt合并后的結(jié)果:
 1 <?xml version="1.0" encoding="gb2312" standalone="no" ?> 
 2 <kfpProject>
 3   <output path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Output.txt" /> 
 4   <report path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Report.txt" /> 
 5   <code>
 6     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibBase\LibA.txt" /> 
 7     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibBase\LibB.txt" /> 
 8     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibC.txt" /> 
 9     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Library\LibD.txt" /> 
10     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2Base\Def2A.txt" /> 
11     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2Base\Def2B.txt" /> 
12     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2C.txt" /> 
13     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\Def2D.txt" /> 
14     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefBase\DefA.txt" /> 
15     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefBase\DefB.txt" /> 
16     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefC.txt" /> 
17     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\DefD.txt" /> 
18     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeBase\CodeA.txt" /> 
19     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeBase\CodeB.txt" /> 
20     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeC.txt" /> 
21     <include path="E:\Coding\VL++\Tools\KfpCompiler\TestData\CodeD.txt" /> 
22   </code>
23 </kfpProject>

    MakeFile分析器的代碼如下。

    頭文件:
 1 #ifndef KERNEL_COMPILER_PROJECTFILE
 2 #define KERNEL_COMPILER_PROJECTFILE
 3 
 4 #include "..\..\..\Library\Data\Data\VL_Data_String.h"
 5 #include "..\..\..\Library\Data\Data\VL_Data_List.h"
 6 
 7 using namespace vl;
 8 using namespace vl::collection;
 9 
10 class ProjectError : public VL_Base
11 {
12 public:
13     VUnicodeString                        Path;
14     VUnicodeString                        Message;
15 };
16 
17 class ProjectFile : public VL_Base
18 {
19 public:
20     typedef VL_AutoPtr<ProjectFile>                    Ptr;
21 
22     class CodeBlock : public VL_Base
23     {
24     public:
25         typedef VL_AutoPtr<CodeBlock>                Ptr;
26         typedef VL_List<Ptr , false , CodeBlock*>    List;
27 
28         VUnicodeString                    CodeBase;
29         VL_List<VUnicodeString , false>    CodePaths;
30     };
31 
32     VL_List<VUnicodeString , false>        InheritPaths;
33     VUnicodeString                        OutputPath;
34     VUnicodeString                        ReportPath;
35     CodeBlock::List                        Codes;
36 
37     void                                Load(VUnicodeString Path);
38     void                                LoadCombined(VUnicodeString Path);
39     void                                Save(VUnicodeString Path);
40 };
41 
42 #endif

    實(shí)現(xiàn)文件:
  1 #include "ProjectFile.h"
  2 #include "..\..\..\Library\Data\VL_Stream.h"
  3 #include "..\..\..\Library\Data\VL_System.h"
  4 #include "..\..\..\Library\XML\VL_XML.h"
  5 
  6 using namespace vl::stream;
  7 using namespace vl::system;
  8 using namespace vl::xml;
  9 
 10 /*********************************************************************************************************
 11 事件
 12 *********************************************************************************************************/
 13 
 14 #define THROW_ERROR(MESSAGE)            \
 15     do{                                    \
 16         ProjectError Error;                \
 17         Error.Path=Path;                \
 18         Error.Message=MESSAGE;            \
 19         throw Error;                    \
 20     }while(0)
 21 
 22 void ProjectFile::Load(VUnicodeString Path)
 23 {
 24     try
 25     {
 26         VL_XMLDocument Document;
 27         VL_FileStream Stream(Path,VL_FileStream::vfomRead);
 28         if(!Stream.IsAvailable())
 29         {
 30             THROW_ERROR(L"工程文件\""+Path+L"\"不存在。");
 31         }
 32         Document.Load(&Stream);
 33 
 34         OutputPath=L"";
 35         ReportPath=L"";
 36         InheritPaths.Clear();
 37         Codes.Clear();
 38 
 39         if(Document.GetRootElement()->GetName()!=L"kfpProject")
 40         {
 41             THROW_ERROR(L"工程文件根節(jié)點(diǎn)必須是kfpProject。");
 42         }
 43 
 44         for(VInt i=0;i<Document.GetRootElement()->GetChildren().GetCount();i++)
 45         {
 46             VL_XMLElement* Element=Document.GetRootElement()->GetChildren()[i]->GetElement();
 47             if(Element)
 48             {
 49                 if(Element->GetName()==L"inherit")
 50                 {
 51                     InheritPaths.Add(Element->GetAttributeByName(L"path")->GetText());
 52                 }
 53                 else if(Element->GetName()==L"output")
 54                 {
 55                     if(OutputPath!=L"")
 56                     {
 57                         THROW_ERROR(L"output節(jié)點(diǎn)只能有一個(gè)。");
 58                     }
 59                     OutputPath=Element->GetAttributeByName(L"path")->GetText();
 60                 }
 61                 else if(Element->GetName()==L"report")
 62                 {
 63                     if(ReportPath!=L"")
 64                     {
 65                         THROW_ERROR(L"report節(jié)點(diǎn)只能有一個(gè)。");
 66                     }
 67                     ReportPath=Element->GetAttributeByName(L"path")->GetText();
 68                 }
 69                 else if(Element->GetName()==L"code")
 70                 {
 71                     CodeBlock::Ptr CurrentCode=new CodeBlock;
 72                     for(VInt j=0;j<Element->GetChildren().GetCount();j++)
 73                     {
 74                         VL_XMLElement* SubElement=Element->GetChildren()[j]->GetElement();
 75                         if(SubElement)
 76                         {
 77                             if(SubElement->GetName()==L"base")
 78                             {
 79                                 if(CurrentCode->CodeBase!=L"")
 80                                 {
 81                                     THROW_ERROR(L"base節(jié)點(diǎn)只能有一個(gè)。");
 82                                 }
 83                                 CurrentCode->CodeBase=SubElement->GetAttributeByName(L"path")->GetText();
 84                             }
 85                             else if(SubElement->GetName()==L"include")
 86                             {
 87                                 CurrentCode->CodePaths.Add(SubElement->GetAttributeByName(L"path")->GetText());
 88                             }
 89                             else
 90                             {
 91                                 THROW_ERROR(L"節(jié)點(diǎn)"+SubElement->GetName()+L"沒(méi)有定義。");
 92                             }
 93                         }
 94                     }
 95                     Codes.Add(CurrentCode);
 96                 }
 97                 else
 98                 {
 99                     THROW_ERROR(L"節(jié)點(diǎn)"+Element->GetName()+L"沒(méi)有定義。");
100                 }
101             }
102         }
103     }
104     catch(const VL_XMLError& XMLError)
105     {
106         THROW_ERROR(L"XML格式錯(cuò)誤:"+XMLError.Message);
107     }
108 }
109 
110 void ProjectFile::LoadCombined(VUnicodeString Path)
111 {
112     VL_List<ProjectFile::Ptr , false , ProjectFile*>    Projects;
113     VL_List<VUnicodeString , false>                        ProjectPaths;
114     VL_List<VUnicodeString , false>                        ToLoadPaths;
115     ToLoadPaths.Add(Path);
116 
117     while(ToLoadPaths.GetCount())
118     {
119         VUnicodeString CurrentPath=ToLoadPaths.Fetch(0);
120         ProjectPaths.Insert(0,CurrentPath);
121         ProjectFile::Ptr Project=new ProjectFile;
122         Project->Load(CurrentPath);
123         Projects.Insert(0,Project);
124         for(VInt i=0;i<Project->InheritPaths.GetCount();i++)
125         {
126             VUnicodeString InheritPath=VFileName(CurrentPath).GetPath().MakeAbsolute(Project->InheritPaths[i]).GetStrW();
127             if(!ToLoadPaths.Exists(InheritPath) && !ProjectPaths.Exists(InheritPath))
128             {
129                 ToLoadPaths.Add(InheritPath);
130             }
131         }
132     }
133 
134     OutputPath=L"";
135     ReportPath=L"";
136     InheritPaths.Clear();
137     Codes.Clear();
138 
139     VUnicodeString CodeBase;
140     CodeBlock::Ptr UniqueCode=new CodeBlock;
141     Codes.Add(UniqueCode);
142 
143     for(VInt i=0;i<Projects.GetCount();i++)
144     {
145         ProjectFile::Ptr Project=Projects[i];
146         if(Project->OutputPath!=L"")
147         {
148             OutputPath=VFileName(ProjectPaths[i]).GetPath().MakeAbsolute(Project->OutputPath).GetStrW();
149         }
150         if(Project->ReportPath!=L"")
151         {
152             ReportPath=VFileName(ProjectPaths[i]).GetPath().MakeAbsolute(Project->ReportPath).GetStrW();
153         }
154         for(VInt j=0;j<Project->Codes.GetCount();j++)
155         {
156             CodeBlock::Ptr CurrentCode=Project->Codes[j];
157             if(CurrentCode->CodeBase!=L"")
158             {
159                 CodeBase=VFileName(ProjectPaths[i]).GetPath().MakeAbsolute(CurrentCode->CodeBase).GetStrW();
160             }
161             else
162             {
163                 CodeBase=ProjectPaths[i];
164             }
165 
166             for(VInt k=0;k<CurrentCode->CodePaths.GetCount();k++)
167             {
168                 VUnicodeString CodePath=VFileName(CodeBase).GetPath().MakeAbsolute(CurrentCode->CodePaths[k]).GetStrW();
169                 UniqueCode->CodePaths.Add(CodePath);
170             }
171         }
172     }
173 }
174 
175 void ProjectFile::Save(VUnicodeString Path)
176 {
177     try
178     {
179         VL_XMLDocument Document;
180         Document.GetRootElement()->SetName(L"kfpProject");
181         for(VInt i=0;i<InheritPaths.GetCount();i++)
182         {
183             Document.GetRootElement()->CreateElement(L"inherit")->GetElement()->CreateAttribute(L"path",InheritPaths[i]);
184         }
185         if(OutputPath!=L"")
186         {
187             Document.GetRootElement()->CreateElement(L"output")->GetElement()->CreateAttribute(L"path",OutputPath);
188         }
189         if(ReportPath!=L"")
190         {
191             Document.GetRootElement()->CreateElement(L"report")->GetElement()->CreateAttribute(L"path",ReportPath);
192         }
193         for(VInt i=0;i<Codes.GetCount();i++)
194         {
195             CodeBlock::Ptr CurrentCode=Codes[i];
196             VL_XMLElement* CodeElement=Document.GetRootElement()->CreateElement(L"code")->GetElement();
197             if(CurrentCode->CodeBase!=L"")
198             {
199                 CodeElement->CreateElement(L"base")->GetElement()->CreateAttribute(L"path",CurrentCode->CodeBase);
200             }
201             for(VInt j=0;j<CurrentCode->CodePaths.GetCount();j++)
202             {
203                 CodeElement->CreateElement(L"include")->GetElement()->CreateAttribute(L"path",CurrentCode->CodePaths[j]);
204             }
205         }
206         VL_FileStream Stream(Path,VL_FileStream::vfomWrite);
207         Document.Save(&Stream,true);
208     }
209     catch(const VL_XMLError& XMLError)
210     {
211         THROW_ERROR(L"XML格式錯(cuò)誤:"+XMLError.Message);
212     }
213 }
posted on 2008-12-24 05:20 陳梓瀚(vczh) 閱讀(1801) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 腳本技術(shù)

評(píng)論:
# re: Kernel FP 編譯器MakeFile開(kāi)發(fā)完成 2008-12-24 06:06 | 123
哇哇哇。。。更新夠快的Y。。。神神。。。  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆精品传媒视频| 激情婷婷久久| 欧美一区在线视频| 亚洲字幕一区二区| 校园激情久久| 久久久久久国产精品一区| 久久精品一区二区三区中文字幕| 午夜精品视频在线观看| 久久国产精品久久精品国产 | 亚洲欧洲免费视频| 欧美国产日韩a欧美在线观看| 欧美成人黑人xx视频免费观看| 亚洲大片av| 亚洲视频电影在线| 久久精品国产第一区二区三区最新章节 | 亚洲一区国产| 久久免费国产| 欧美午夜理伦三级在线观看| 国产欧美一区视频| 91久久一区二区| 午夜精品久久久久久久久久久久久 | 午夜精品在线看| 欧美顶级大胆免费视频| 一区二区三区欧美成人| 久久久久国产一区二区三区| 欧美精品色综合| 国产在线观看一区| 午夜精品久久久久久久久久久| 老司机一区二区三区| 六月丁香综合| 久久久久久亚洲精品杨幂换脸| 国产女人精品视频| 日韩亚洲视频| 麻豆freexxxx性91精品| 一区二区三区精品在线| 欧美jizz19性欧美| 狠狠v欧美v日韩v亚洲ⅴ| 一本一本久久| 欧美高清成人| 久久久夜夜夜| 极品裸体白嫩激情啪啪国产精品| 一区二区三区精品久久久| 欧美777四色影视在线| 亚洲欧美精品在线| 国产欧美一区二区精品性色| 亚洲欧美日韩成人| 亚洲婷婷综合久久一本伊一区| 欧美人妖另类| 亚洲免费视频成人| 中日韩男男gay无套| 国产精品免费一区二区三区观看| 一区二区三区黄色| 亚洲在线中文字幕| 一区在线播放视频| 欧美成人一品| 欧美日本不卡视频| 亚洲欧美激情四射在线日| 午夜欧美大片免费观看| 黄色成人在线免费| 日韩一区二区精品葵司在线| 国产精品美女久久久久久2018| 日韩天堂在线观看| 性欧美1819性猛交| 亚洲国产精品久久久久秋霞影院 | 蜜臀va亚洲va欧美va天堂 | 欧美电影免费网站| 亚洲一区二区综合| 久久久av网站| 欧美伊人久久久久久久久影院| 免费成人小视频| 久久久亚洲高清| 国产精品拍天天在线| 亚洲国产精品999| 国产欧美日韩一区二区三区在线观看 | 在线视频亚洲| 一区二区三区四区五区精品视频 | 久久精品综合一区| 欧美色欧美亚洲另类二区| 亚洲电影天堂av| 国产综合久久| 久久久久久久久岛国免费| 欧美一级片久久久久久久| 欧美日韩国产首页| 亚洲欧美日本伦理| 久久五月天婷婷| 久久久人人人| 在线观看av不卡| 欧美r片在线| 欧美一区91| 久久夜色精品国产噜噜av| 国产综合精品一区| 久久免费视频这里只有精品| 欧美~级网站不卡| 日韩视频在线你懂得| 国产精品久久久久毛片大屁完整版| 一本大道久久精品懂色aⅴ| 亚洲欧美精品一区| 精品91在线| 欧美日韩视频在线一区二区| 亚洲自拍高清| 亚洲高清影视| 小嫩嫩精品导航| 亚洲另类视频| 激情亚洲网站| 国产精品久久婷婷六月丁香| 久久久精品性| 亚洲欧美区自拍先锋| 91久久极品少妇xxxxⅹ软件| 久久国产精品久久久久久久久久| 亚洲第一视频网站| 国产亚洲精品久久久久久| 欧美三级在线| 欧美人成在线| 欧美精品v国产精品v日韩精品 | 久久亚洲一区| 久久综合狠狠综合久久综青草| 国产主播一区二区三区| 国产乱码精品一区二区三区五月婷 | 一区二区三区高清在线观看| 久久亚洲精品一区二区| 欧美伊人久久久久久久久影院 | 久久蜜桃av一区精品变态类天堂| 亚洲视屏在线播放| 一卡二卡3卡四卡高清精品视频 | 欧美激情一区二区三区全黄| 久久精品国产亚洲精品| 亚洲欧美另类久久久精品2019| 亚洲午夜女主播在线直播| 夜夜精品视频一区二区| 午夜精品一区二区在线观看| 亚洲一区二区三区视频播放| 亚洲欧美一区二区精品久久久| 亚洲免费在线视频| 欧美制服第一页| 久久综合中文色婷婷| 欧美成人激情视频| 国产精品一区亚洲| 亚洲精品影院| 国模精品娜娜一二三区| 欧美精品日韩一区| 国产精品高潮视频| 亚洲观看高清完整版在线观看| 亚洲欧洲中文日韩久久av乱码| 野花国产精品入口| 久久久999精品视频| 91久久在线| 欧美在线免费视频| 国产精品女人久久久久久| 亚洲国产精品一区在线观看不卡 | 欧美日韩一区三区| 国产一二三精品| 欧美中文字幕第一页| 亚洲精品日韩久久| 久久亚洲精品网站| 亚洲第一精品影视| 免费一级欧美在线大片| 亚洲一区综合| 国产精品老牛| 亚洲永久精品国产| 亚洲深爱激情| 国产日韩欧美日韩| 久久这里有精品视频| 久久久99国产精品免费| 黑人巨大精品欧美黑白配亚洲| 欧美一区二区国产| 欧美专区日韩视频| 国产一区二区中文| 欧美va天堂| 鲁鲁狠狠狠7777一区二区| 黄色精品一区| 亚洲欧洲午夜| 国产精品一区久久| 亚洲欧美精品一区| 亚洲欧洲在线看| 欧美午夜不卡在线观看免费| 亚洲一卡二卡三卡四卡五卡| 国产精品99久久久久久久久| 国产喷白浆一区二区三区| 欧美大片免费观看| 国产麻豆91精品| 亚洲国产高清一区二区三区| 国产精品区一区二区三区| 美女国产一区| 国产日韩欧美精品综合| 亚洲精品国产系列| 亚洲国产成人在线视频| 亚洲欧美成人一区二区三区| 日韩午夜高潮| 欧美国产日本高清在线| 久久久国产91| 国产日韩免费| 午夜在线成人av| 欧美在线观看你懂的| 国产精品国产a级| 亚洲精品欧美激情| 久久久青草婷婷精品综合日韩| 亚洲淫性视频| 国产精品jvid在线观看蜜臀| 亚洲精品欧洲精品| 亚洲欧美在线高清|