以前在windows下用VS寫代碼,不管有多少個文件夾,有多少個文件,寫完以后只需要一鍵就什么都搞定了。但是當移步linux下時,除非你使用圖形界面,並且使用Qt creater這類的IDE時,才可以繼續像windows下一樣一鍵搞定所有事情,否則就不得不接觸gcc/g++/make/cmake/makefile/cmakelists這些東西了,那他們是干什么的呢?彼此之間又是什么關系呢?
1、gcc/g++
gcc是GNU Compiler Collection的全稱,是一個編譯套件。通過gcc/g++我們就可以完成源文件的編譯鏈接等工作,例如寫了一個helloworld.cpp源程序,用: g++ helloworld.cpp -o helloworld就可以編譯鏈接生成出一個名為helloworld的可執行文件了。這是一個文件的情況,但是當一個工程有很多個文件夾很多個文件時,繼續通過這種方式一個一個去編譯鏈接,那程序員不吐血才怪,於是便出現了makefile。
2、makefile
makefile其實就是包含了一堆有條理的gcc/g++編譯命令的文件,我們可以提前手寫好makefile文件,以此來提高工作效率。那有了makefile文件以后又該怎么玩呢?這個時候make就出現了。
3、make
make就是一個讀取makefile文件中的指令來完成編譯鏈接工作的工具。
4、CMakelists
手寫makefile文件寫得很嗨,但是當項目更加龐大時,估計就寫得沒那么嗨了。於是就出現了CMakelists,有了CMakelists程序員就不需要再去寫makefile文件了,程序員只需要寫更簡單的CMakelists來生成對應的Makefile文件就可以了。那么makefile怎么通過CMakelists來生成呢?沒錯,就是通過cmake工具生成的。
5、cmake
類似Make工具的功能,CMake工具就是“讀取”並執行CMakelists.txt文件中的語句,來生成對應的Makefile。然后開發者就可以通過Make工具來“執行”Makefile了。
總結:論一個程序員變懶的過程。通過cmake讀取CMakelists生成Makefile,然后再通過Make工具讀取執行Makefile來構建工程。