首先推薦大家看一下這一篇Jetbrains的研究報告:
https://www.jetbrains.com/lp/devecosystem-2020/cpp/
編輯器使用分布
構(gòu)建系統(tǒng)使用分布:
下面講正題:
構(gòu)建系統(tǒng)的最主要功能是解決文件編譯順序依賴葵萎,三方共享庫依賴等問題碗短。
正確使用這些構(gòu)建系統(tǒng)能夠幫助大家節(jié)省大量時間魁衙,避免重復(fù)的手動敲命令。
今天來說說Makefile 以及 GNU Make 這個源遠流長巫俺,橫亙古今的優(yōu)秀構(gòu)建系統(tǒng)(雖然我也推薦新項目使用CMake)认烁。
Make 最核心的理念就是目標(biāo)驅(qū)動型構(gòu)建,即使用者通過表述目標(biāo)與這些目標(biāo)之間的關(guān)系來確定一個構(gòu)建任務(wù)圖。
表達形式類似:
target:? dependencies ...
? ? ? ? ? commands
? ? ? ? ? ...
舉個例子:
我們就定義了一個 foo.o 這個目標(biāo)却嗡。此外每條 rule 都表述了兩個信息:
This rule says two things:
How to decide whether?foo.o?is out of date: it is out of date if it does not exist, or if either?foo.c?or?defs.h?is more recent than it.
How to update the file?foo.o: by running?cc?as stated. The recipe does not explicitly mention?defs.h, but we presume that?foo.c?includes it, and that is why?defs.h?was added to the prerequisites.
具體的Make 的細節(jié)在文檔里講的比較清楚了舶沛、 Makefile 規(guī)則大家也可以參考文檔:
https://www.gnu.org/software/make/manual/html_node/index.html
大家可以寫個Makefile 動手嘗試一下!
此外窗价,一些好用的文章推薦給大家: