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

maxingyu發表於2021-05-18

1. gcc是GNU Compiler Collection(就是GNU編譯器套件),也可以簡單認為是編譯器,它可以編譯很多種程式語言(括C、C++、Objective-C、Fortran、Java等等)。

2. 當你的程式只有一個原始檔時,直接就可以用gcc命令編譯它。

3. 但是當你的程式包含很多個原始檔時,用gcc命令逐個去編譯時,你就很容易混亂而且工作量大

4. 所以出現了make工具make工具可以看成是一個智慧的批處理工具,它本身並沒有編譯和連結的功能,而是用類似於批處理的方式—通過呼叫makefile檔案中使用者指定的命令來進行編譯和連結的。

5. makefile是什麼?簡單的說就像一首歌的樂譜,make工具就像指揮家,指揮家根據樂譜指揮整個樂團怎麼樣演奏,make工具就根據makefile中的命令進行編譯和連結的。

6. makefile命令中就包含了呼叫gcc(也可以是別的編譯器)去編譯某個原始檔的命令。

7. makefile在一些簡單的工程完全可以人工手下,但是當工程非常大的時候,手寫makefile也是非常麻煩的,如果換了個平臺makefile又要重新修改。

8. 這時候就出現了Cmake這個工具,cmake就可以更加簡單的生成makefile檔案給上面那個make用。當然cmake還有其他功能,就是可以跨平臺生成對應平臺能用的makefile,你不用再自己去修改了。

9. 可是cmake根據什麼生成makefile呢?它又要根據一個叫CMakeLists.txt檔案(學名:組態檔)去生成makefile。

10. 到最後CMakeLists.txt檔案誰寫啊?親,是你自己手寫的。

11. 當然如果你用IDE,類似VS這些一般它都能幫你弄好了,你只需要按一下那個三角形

12. 接著是qmake,qmake是什麼,先說一下Qt這個東西。Qt是跨平臺C++圖形使用者介面應用程式開發框架。它既可以開發GUI程式,也可用於開發非GUI程式,比如控制檯工具和伺服器。簡單的說就是C++的第三方庫,使用這個庫你可以很容易生成windows,Linux,MAC os等等平臺的圖形介面。現在的Qt還包含了開發各種軟體一般需要用到的功能模組(網路,資料庫,XML,多執行緒啊等等),比你直接用C++(只帶標準內褲那種)要方便和簡單。

13. 你可以用Qt簡簡單單就實現非常複雜的功能,是因為Qt對C++進行了擴充套件,你寫一行程式碼,Qt在背後幫你寫了幾百上千行,而這些多出來的程式碼就是靠Qt專有的moc編譯器(The Meta-Object Compiler)和uic編譯器(User Interface Complier)來重新翻譯你那一行程式碼。問題來了,你在進行程式編譯前就必須先呼叫moc和uic對Qt原始檔進行預處理,然後再呼叫編譯器進行編譯。上面說的那種普通makefile檔案是不適用的,它沒辦法對qt原始檔進行預處理。所以qmake就產生了。

14. qmake工具就是Qt公司製造出來,用來生成Qt 專用makefile檔案,這種makefile檔案就能自動智慧呼叫moc和uic對源程式進行預處理和編譯。qmake當然必須也是跨平臺的,跟cmake一樣能對應各種平臺生成對應makefile檔案。

15. qmake是根據Qt 工程檔案(.pro)來生成對應的makefile的。工程檔案(.pro)相對來說比較簡單,一般工程你都可以自己手寫,但是一般都是由Qt的開發環境 Qt Creator自動生成的,你還是隻需要按下那個邪惡三角形就完事了。

16. 還沒有完,由於qmake很簡單很好用又支援跨平臺,而且是可以獨立於它的IDE,所以你也可以用在非Qt工程上面,照樣可以生成普通的makefile,只要在pro檔案中加入CONFIG -= qt 就可以了。

17. 這樣qmake和cmake有什麼區別?

不好意思,cmake也是同樣支援Qt程式的,cmake也能生成針對qt 程式的那種特殊makefile,

只是cmake的CMakeLists.txt 寫起來相對與qmake的pro檔案複雜點。

qmake 是為 Qt 量身打造的,使用起來非常方便,但是cmake功能比qmake強大。

一般的Qt工程你就直接使用qmake就可以了,cmake的強大功能一般人是用不到的。

當你的工程非常大的時候,又有qt部分的子工程,又有其他語言的部分子工程,據說用cmake會方便,我也沒試過。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章