本文基於一個需要對 C 語言家族項目進行編譯、生成解決方案的開發者的視角,對編譯過程中所需要的各個工具進行簡要的名詞解釋。
GCC | LLVM 提供編譯器 <-- GNU Make 根據配置文件進行編譯 <-- Autoconf | CMake 自動生成編譯用的配置文件
注:上面提到的各類集合和工具所能做的事情並不僅僅局限於此。
GCC | LLVM
GCC
和 LLVM
是我們在編譯 C 系項目時最常使用的兩個工具鏈。
GCC
的全稱是 GNU Compiler Collection , 即 GNU 編譯器集合;
LLVM
的全稱就是 LLVM (最開始的時候作為 Low Level Virtual Machine 的縮寫,現在涵義已經發生了變化),現在是作為 LLVM 的編譯器和工具鏈集合的一個總稱。
gcc
,全稱 GNU C Compiler,是 GCC 中的 C 編譯器;
g++
,全稱 GNU C++ Compiler,是 GCC 中的 C++ 編譯器。
Clang
是 LLVM 集合前端中的 C 系編譯器和工具鏈。Clang 兼容 GCC ,Clang 出現的時間比 GCC 晚,相比 GCC , Clang 的編譯速度更快,錯誤提示更友好。
GNU Make
當項目的源文件數量很多,結構十分復雜時,僅僅使用編譯器對項目進行編譯,會是一件十分繁瑣的事情,引用頭文件目錄,引入源文件,引入第三方靜態庫動態庫都會十分的繁瑣。
GNU Make
能夠基於前面提供的編譯器,選擇項目中合適的源文件來生成項目所需的中間目標文件和可執行文件。開發者通過編寫一個名為 makefile
的文件來指導 GNU Make
處理編譯。
Autoconf | CMake
Autoconf
是 m4
宏處理的擴展包,通過它可以生成一個腳本,這個腳本能夠自動生成編譯用的配置文件。Autoconf
和 Automake
是一對。
CMake
是一個開源的軟件,開發者通過編寫獨立於平台和編譯器的配置文件,來指導項目的編譯過程。
Autoconf 中涉及的概念比較多,生成腳本的步驟比較繁瑣, CMake 在使用上更為簡單。
參考鏈接
LLVM
GCC,the GNU Compiler Collection
GNU Make
diff between gcc and g++
Programming Languages Supported by GCC
Clang
CMake
Autoconf