久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Ninja

 wusiqi111 2017-02-20

什么是Ninja

在Unix/Linux下通常使用Makefile來控制代碼的編譯,,但是Makefile對(duì)于比較大的項(xiàng)目有時(shí)候會(huì)比較慢,看看上面那副漫畫,,代碼在編譯都變成了程序員放松的借口了,。所以這個(gè)Google的程序員在開發(fā)Chrome的時(shí)候因?yàn)槿淌懿涣薓akefile的速度,自己重新開發(fā)出來一套新的控制編譯的工具叫作Ninja,,Ninja相對(duì)于Makefile這套工具更注重于編譯速度,。除了Chrome現(xiàn)在還有一些其他的比較大的項(xiàng)目也在開始使用Ninja,比如LLVM,。我試用了一下感覺還是不錯(cuò),,比如編譯Cmake時(shí)間大概是原來的1/4。Ninja試用C++實(shí)現(xiàn),,其支持的語法非常簡(jiǎn)單,,作者在這里說明了為了控制復(fù)雜度。

代碼如何編譯

其實(shí)對(duì)于C/C++和很多其他程序的編譯都是一個(gè)道理,,就是把一些源代碼文件編譯成目標(biāo)文件,,或者有的目標(biāo)文件再編譯到一個(gè)庫里,然后再鏈接起來,。所以Ninja的配置文件分為兩個(gè)部分,,rule和文件依賴關(guān)系??磦€(gè)簡(jiǎn)單的例子:

 cc=gcc cflags= -g -c
    
    rule cc command = $cc $cflags $in -o $out rule link command = $cc $in -o $out rule cleanup command = rm -rf *.exe *.o
    
    build func.o           : cc func.c
    build main.o           : cc main.c
    
    build app.exe            : link main.o func.o
    
    build all:  phony || app.exe
    build clean: cleanup 

非常易懂,,編譯的可執(zhí)行未見叫做app.exe, 其中有三條rule: cc, link, cleanup??纯催@個(gè)官方的試用手冊(cè),,還有一些附加參數(shù)可以加在rule的下面,比如description用來在編譯的時(shí)候顯示出來,。Ninja還有個(gè)比較好玩的功能就是Ninja -t graph all命令,,這可以用來生成編譯時(shí)候的依賴關(guān)系,可以用dot來生成圖片等,。Ninja的實(shí)現(xiàn)也可以大概推測(cè)到,,根據(jù)用戶給的依賴關(guān)系圖,并行 地編譯各個(gè)文件。

使用Ninja的一個(gè)問題就是需要生成這個(gè)build.ninja文件,,對(duì)于大型項(xiàng)目來說這樣一條一條地寫配置文件是不可能的,。幸好我們可以使用Cmake來生成這個(gè)配置文件,Cmake對(duì)應(yīng)的是automake這樣的東西,。在Cmake的最新版本中已經(jīng)支持參數(shù)Camke -G Ninja,,Cmake會(huì)根據(jù)用戶給定的CMakeLists.txt來生成build.ninja文件。而CmakeLists文件相對(duì)來說要簡(jiǎn)單一些,,只要寫清楚編譯的可執(zhí)行文件的名字,,和其依賴的包含main函數(shù)的源文件。把我的迷宮小項(xiàng)目來舉個(gè)例子,在項(xiàng)目文件夾下寫配置文件CMakeLists.txt:

 cmake_minimum_required(VERSION 2.8) project (Maze) add_library(maze A_star.cpp Algorithm.cpp DFS_L.cpp DFS_R.cpp DisjSets.cpp Maze.cpp) add_executable(Maze.exe main.cpp) target_link_libraries(Maze.exe maze) 

add_library寫明了生成一個(gè)叫做maze.a的庫文件,,然后和main.cpp編譯出來的main.o生成可執(zhí)行文件,,寫好CmakeList.txt后運(yùn)行Cmake -G Ninja, 然后運(yùn)行ninja all就能編譯這個(gè)工程。具體的Cmake語法參考這里,,對(duì)于不少項(xiàng)目來說Cmake已經(jīng)足夠使用,,只是我覺得Cmake還是稍微復(fù)雜了一點(diǎn)。

我這樣來使用

整個(gè)Ninja是使用C++寫的開源項(xiàng)目,,如果我們想增加一些自己的feature可以hack一下,,不過作者估計(jì)不會(huì)接受增加語法支持的patch。我準(zhǔn)備做一個(gè)小的hack來自動(dòng)分析我當(dāng)前的源碼,,自動(dòng)生成build.ninja文件,,不要求處理所有的復(fù)雜情況,只是分析.cc和.c,,自動(dòng)檢測(cè)main函數(shù)文件,。最后用戶只用配置鏈接參數(shù)就可以了。我覺得這樣用起來就非常方便了,,待完成中,,順便看看Ninja的內(nèi)部實(shí)現(xiàn)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多