CMake呐舔、Make潜索、CMakeLists.txt以及Makefile的關系與區(qū)別
作者:玟清
鏈接:https://www.zhihu.com/question/27455963/answer/36722992
來源:知乎
著作權(quán)歸作者所有卸勺。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處雨席。
make 是用來執(zhí)行Makefile文件的工具
Makefile是類unix環(huán)境下(比如Linux)的類似于批處理的"腳本"文件亚皂。其基本語法是: 目標+依賴+命令,只有在目標文件不存在柱宦,或目標比依賴的文件更舊些椒,命令才會被執(zhí)行。由此可見掸刊,Makefile和make可適用于任意工作免糕,不限于編程。比如忧侧,可以用來管理latex石窑。
Makefile+make可理解為類unix環(huán)境下的項目管理工具,但它太基礎了蚓炬,抽象程度不高松逊,而且在windows下不太友好(針對visual studio用戶),于是就有了跨平臺項目管理工具cmake肯夏。
cmake是跨平臺項目管理工具棺棵,它用更抽象的語法來組織項目楼咳。雖然,仍然是目標烛恤,依賴之類的東西,但更為抽象和友好余耽,比如你可用math表示數(shù)學庫缚柏,而不需要再具體指定到底是math.dll還是libmath.so,在windows下它會支持生成visual studio的工程碟贾,在linux下它會生成Makefile币喧,甚至它還能生成eclipse工程文件。也就是說袱耽,從同一個抽象規(guī)則出發(fā)杀餐,它為各個編譯器定制工程文件。
cmake是抽象層次更高的項目管理工具朱巨,cmake命令執(zhí)行的CMakeLists.txt文件
qmake是Qt專用的項目管理工具史翘,對應的工程文件是.pro,在Linux下面它也會生成Makefile冀续,當然琼讽,在命令行下才會需要手動執(zhí)行qmake,完全可以在qtcreator這個專用的IDE下面打開.pro文件洪唐,使用qmake命令的繁瑣細節(jié)不用你管了钻蹬。
總結(jié)一下,make是用來執(zhí)行Makefile凭需,而cmake用來執(zhí)行CMakeLists.txt问欠,qmake用來處理 .pro工程文件。Makefile的抽象層次最低粒蜈,cmake和qmake在Linux等環(huán)境下最后還是會生成一個Makefile顺献。cmake和qmake支持跨平臺,cmake的做法是生成指定編譯器的工程文件薪伏,而qmake完全自成體系滚澜。
具體使用時,Linux下嫁怀,小工程可手動寫Makefile设捐,大工程用automake來幫你生成Makefile,要想跨平臺塘淑,就用cmake萝招。如果GUI用了Qt,也可以用qmake+*.pro來管理工程存捺,這也是跨平臺的槐沼。當然曙蒸,cmake中也有針對Qt的一些規(guī)則,并代替qmake幫你將qt相關的命令整理好了岗钩。另外纽窟,需要指出的是,make和cmake主要命令只有一條兼吓,make用于處理Makefile臂港,cmake用來轉(zhuǎn)譯CMakeLists.txt,而qmake是一個體系视搏,用于支撐一個編程環(huán)境审孽,它還包含除qmake之外的其它多條命令(比如uic,rcc,moc)浑娜。上個簡圖佑力,其中cl表示visual studio的編譯器,gcc表示linux下的編譯器.