1 gcc
gcc是GNU Compiler Collection(就是GNU編譯器套件),也可以簡單認爲是編譯器,它可以編譯很多種編程語言(括C、C++、Objective-C、Fortran、Java等等)。假如有一個源文件(比如.c文件),就可以通過gcc命令來編譯它。
2 clang
clang是一個C語言、C++、Objective-C語言的輕量級編譯器。源代碼發佈於BSD協議下。Clang將支持其普通lambda表達式、返回類型的簡化處理以及更好的處理constexpr關鍵字。
gcc比Clang支持的語言更多一些,而Clang比gcc編譯速度更快一些,錯誤提示更人性化。
問題:當你的程序包含很多個源文件時,用gcc命令逐個去編譯時,你就很容易混亂而且工作量大,所以出現了make工具。
3 make工具
make工具可以看成是一個智能的批處理工具,它本身並沒有編譯和鏈接的功能,而是用類似於批處理的方式,通過調用Makefile文件中用戶指定的命令來進行編譯和鏈接的。
問題:那麼Makefile是什麼呢?
4 Makefile文件
簡單的說就像一首歌的樂譜,make工具就像指揮家,指揮家根據樂譜指揮整個樂團怎麼樣演奏,make工具就根據Makefile中的命令進行編譯和鏈接的。Makefile命令中就包含了調用 gcc(也可以是別的編譯器)去編譯某個源文件的命令。
問題:
Makefile在一些簡單的工程完全可以人工手下,但是當工程非常大的時候,手寫Makefile也是非常麻煩的,如果換了個平臺Makefile又要重新修改。這時候就出現了Cmake這個工具。
5 CMake工具
CMake可以更加簡單的生成Makefile文件給上面那個make用。當然CMake還有其他功能,就是可以跨平臺生成對應平臺能用的makefile,你不用再自己去修改了。
問題:CMake根據什麼生成Makefile呢?
6 CMakeLists.txt 文件
Cmake工具根據CMakeLists.txt文件(組態檔)去生成Makefile。
7 綜上所述
- 用戶編寫或根據IDE自動生成CMakeLists.txt文件;
- 執行cmake命令,CMake會根據CMakeLists.txt文件(組態檔)去生成Makefile;
- 執行make命令,它將讀取Makefile文件中的命令來進行編譯和鏈接;
- 這樣在面對多個源文件時,就省去了自己手動編譯多個源文件的工作量;