gcc clang make Makefile CMake CMakeLists.txt 的關係

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文件中的命令來進行編譯和鏈接;
  • 這樣在面對多個源文件時,就省去了自己手動編譯多個源文件的工作量;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章