1. 程式人生 > >make makefile cmake qmake 都是什麼,有什麼區別?

make makefile cmake qmake 都是什麼,有什麼區別?

  1. make 是用來執行Makefile的
  2. Makefile是類unix環境下(比如Linux)的類似於批處理的”指令碼”檔案。其基本語法是: 目標+依賴+命令,只有在目標檔案不存在,或目標比依賴的檔案更舊,命令才會被執行。由此可見,Makefile和make可適用於任意工作,不限於程式設計。比如,可以用來管理latex。
  3. Makefile+make可理解為類unix環境下的專案管理工具,但它太基礎了,抽象程度不高,而且在windows下不太友好(針對visual studio使用者),於是就有了跨平臺專案管理工具cmake
  4. cmake是跨平臺專案管理工具,它用更抽象的語法來組織專案。雖然,仍然是目標,依賴之類的東西,但更為抽象和友好,比如你可用math表示數學庫,而不需要再具體指定到底是math.dll還是libmath.so,在windows下它會支援生成visual studio的工程,在linux下它會生成Makefile,甚至它還能生成eclipse工程檔案。也就是說,從同一個抽象規則出發,它為各個編譯器定製工程檔案。
  5. cmake是抽象層次更高的專案管理工具,cmake命令執行的CMakeLists.txt檔案
  6. qmake是Qt專用的專案管理工具,對應的工程檔案是.pro,在Linux下面它也會生成Makefile,當然,在命令列下才會需要手動執行qmake,完全可以在qtcreator這個專用的IDE下面開啟.pro檔案,使用qmake命令的繁瑣細節不用你管了。

總結一下,make用來執行Makefile,cmake用來執行CMakeLists.txt,qmake用來處理*.pro工程檔案。Makefile的抽象層次最低,cmake和qmake在Linux等環境下最後還是會生成一個Makefile。cmake和qmake支援跨平臺,cmake的做法是生成指定編譯器的工程檔案,而qmake完全自成體系。

具體使用時,Linux下,小工程可手動寫Makefile,大工程用automake來幫你生成Makefile,要想跨平臺,就用cmake。如果GUI用了Qt,也可以用qmake+*.pro來管理工程,這也是跨平臺的。當然,cmake中也有針對Qt的一些規則,並代替qmake幫你將qt相關的命令整理好了。

另外,需要指出的是,make和cmake主要命令只有一條,make用於處理Makefile,cmake用來轉譯CMakeLists.txt,而qmake是一個體系,用於支撐一個程式設計環境,它還包含除qmake之外的其它多條命令(比如uic,rcc,moc)。

上個簡圖,其中cl表示visual studio的編譯器,gcc表示linux下的編譯器
這裡寫圖片描述