IDE、Cmake、makefile、make

makefile :就是一個相似腳本的文件,根據一系列規則用於決定哪些文件先編譯,哪些文件從新編譯等等。甚至於進行更復雜的功能操做,並且還能夠執行操做系統的命令。makefile帶來的好處就是——「自動化編譯」,一旦寫好,只須要一個make命令,整個工程徹底自動編譯,極大的提升了軟件開發的效率。

make是一個命令工具,是一個解釋makefile中指令的命令工具。通常來講,大多數的IDE都有這個命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。linux

這些 Make 工具遵循着不一樣的規範和標準,所執行的 Makefile 格式也千差萬別。程序員

這樣就帶來了一個嚴峻的問題:若是軟件想跨平臺,必需要保證可以在不一樣平臺編譯。而若是使用上面的 Make 工具,就得爲每一種標準寫一次 Makefile ,這將是一件讓人抓狂的工做。 工具

makefile成爲了一種在工程方面的編譯方法。 makefile一般依賴於你當前的編譯平臺,並且編寫makefile的工做量比較大,解決依賴關係時也容易出錯。性能

這就是make和makefile二者之間的關係。make以後生成obj中間文件,再link一下就生成可執行文件了。學習

 

CMake CMakespa

 CMake就是針對上面問題所設計的工具:它首先容許開發者編寫一種平臺無關的 CMakeList.txt 文件來定製整個編譯流程,而後再根據目標用戶的平臺進一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。從而作到「Write once, run everywhere」。顯然,CMake 是一個比上述幾種 make 更高級的編譯配置工具。操作系統

相似Make工具的功能,CMake工具就是「讀取」並執行CMakelists.txt文件中的語句,來生成對應的Makefile。而後開發者就能夠經過Make工具來「執行」Makefile了。.net

 

 

在 linux 平臺下使用 CMake 生成 Makefile 並編譯的流程以下:設計

  1. 編寫 CMake 配置文件 CMakeLists.txt 。
  2. 執行命令 cmake PATH 或者 ccmake PATH 生成 Makefile 1ccmake 和 cmake 的區別在於前者提供了一個交互式的界面。。其中, PATH 是 CMakeLists.txt 所在的目錄。
  3. 使用 make 命令進行編譯。

 

makefile的目的是爲了實現自動編譯的目的,會用到make工具去執行makefile上的編譯指令。並且不一樣平臺的makefile文件編寫規則不同。調試

其實手動編寫makefile是一件讓人抓狂的事,並且也很愚蠢。

應該使用cmake工具自動生成makefile。這樣的話會編寫CMakelists.txt就行了。

其實這些編譯相關的工做如今大多都交給IDE去完成了。做爲知識面的擴展和底層原理的理解仍是有必要的。

======================================================

IDE的功能:

代碼編輯、分析功能、編譯功能、調試功能;

 

IDE的優缺點:

優勢
  • 節省時間和精力。IDE的目的就是要讓開發更加快捷方便,經過提供工具和各類性能來幫助開發者組織資源,減小失誤,提供捷徑。
  • 創建統一標準。當一組程序員使用同一個開發環境時,就創建了統一的工做標準,當IDE提供預設的模板,或者不一樣團隊分享代碼庫時,這一效果就更加明顯了。
  • 管理開發工做。首先,IDE提供文檔工具,能夠自動輸入開發者評論,或者迫使開發者在不一樣區域編寫評論。其次,IDE能夠展現資源,更便於發現應用所處位置,無需在文件系統裏面艱難的搜索。
缺點
  • 學習曲線問題。IDE基本上是比較複雜的工具,爲了更好的熟練使用,須要必定的時間和耐心。
  • 初學者的困難。對初學者來講,使用IDE來學習開發有至關的難度,不適合學習一種新語言時使用。
  • 沒法修復壞代碼或設計。開發者不能徹底依賴工具的便捷,仍是必須保持專業水準和熟練度,開發的成果好壞主要仍是看開發員的技術。

=================================================

參考連接:

Cmake和makefile:https://blog.csdn.net/qq_28038207/article/details/80791694

Cmake入門實戰:https://www.hahack.com/codes/cmake/

GCC、Make、CMake、Makefile、CMakelists的關係:https://www.jianshu.com/p/184a33eddf93

相關文章
相關標籤/搜索