CMake是什麼?有什麼用?

2021-10-04 16:24:14 字數 2902 閱讀 6423

原創

andrewzhou924

最後發布於2018-05-19 09:05:20

閱讀數 10989

收藏

發布於2018-05-19 09:05:20

分類專欄:

學習筆記

展開cmake是乙個跨平台的編譯(build)工具,可以用簡單的語句來描述所有平台的編譯過程。

cmake能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的c++特性,類似unix下的automake。

假如我們有乙個深度學習框架的部分工程列表,裡面有超過40個互相呼叫的工程共同組成,一些用於生成庫檔案,一些用於實現邏輯功能。他們之間的呼叫關係複雜而嚴格,如果我想在這樣複雜的框架下進行二次開發,顯然只擁有它的原始碼是遠遠不夠的,還需要清楚的明白這幾十個專案之間的複雜關係,在沒有原作者的幫助下進行這項工作幾乎是不可能的。

或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解html的標識的含義。特別在unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。因為,makefile關係到了整個工程的編譯規則。乙個工程中的原始檔不計數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是——「自動化編譯」,一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是乙個命令工具,是乙個解釋makefile中指令的命令工具,一般來說,大多數的ide都有這個命令,比如:delphi的make,visual c++的nmake,linux下gnu的make。可見,makefile都成為了一種在工程方面的編譯方法。

對於乙個大型軟體,其編譯、維護是乙個複雜而耗時的過程。它涉及到大量的檔案、目錄,這些檔案可能是在不同的時間、由不同的人、在不同的地方分別寫的,其中一些是程式,有些是資料,有些是文件,有些是衍生檔案。甚至參與開發的人員也不一定清楚所有檔案的細節,包括如何處理它們。此外,構成軟體的檔案數目可能達到成百上千,甚至成千上萬個,開發過程中當修改了少量幾個檔案後,往往只需要重新編譯、生成少數幾個檔案。有效地描述這些檔案之間的依賴關係以及處理命令,當個別檔案改動後僅執行必要的處理,而不必重複整個編譯過程,可以大大提高軟體開發的效率。

cmake是用來makefile的乙個工具:讀入所有原始檔之後,自動生成makefile。

附上makefile經典教程:

cmake是乙個跨平台的編譯(build)工具,可以用簡單的語句來描述所有平台的編譯過程。

cmake能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的c++特性,類似unix下的automake。

假如我們有乙個深度學習框架的部分工程列表,裡面有超過40個互相呼叫的工程共同組成,一些用於生成庫檔案,一些用於實現邏輯功能。他們之間的呼叫關係複雜而嚴格,如果我想在這樣複雜的框架下進行二次開發,顯然只擁有它的原始碼是遠遠不夠的,還需要清楚的明白這幾十個專案之間的複雜關係,在沒有原作者的幫助下進行這項工作幾乎是不可能的。

或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解html的標識的含義。特別在unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。因為,makefile關係到了整個工程的編譯規則。乙個工程中的原始檔不計數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是——「自動化編譯」,一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是乙個命令工具,是乙個解釋makefile中指令的命令工具,一般來說,大多數的ide都有這個命令,比如:delphi的make,visual c++的nmake,linux下gnu的make。可見,makefile都成為了一種在工程方面的編譯方法。

對於乙個大型軟體,其編譯、維護是乙個複雜而耗時的過程。它涉及到大量的檔案、目錄,這些檔案可能是在不同的時間、由不同的人、在不同的地方分別寫的,其中一些是程式,有些是資料,有些是文件,有些是衍生檔案。甚至參與開發的人員也不一定清楚所有檔案的細節,包括如何處理它們。此外,構成軟體的檔案數目可能達到成百上千,甚至成千上萬個,開發過程中當修改了少量幾個檔案後,往往只需要重新編譯、生成少數幾個檔案。有效地描述這些檔案之間的依賴關係以及處理命令,當個別檔案改動後僅執行必要的處理,而不必重複整個編譯過程,可以大大提高軟體開發的效率。

cmake是用來makefile的乙個工具:讀入所有原始檔之後,自動生成makefile。

附上makefile經典教程:

CMake是什麼?有什麼用

cmake cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的c 特性,類似unix下的automake。假如我們有乙個深度學習框架的部分工程列表,裡面有超過40個互相呼叫...

nginx是什麼?有什麼用?

一句話概述 nginx是乙個使用c語言編寫的 開源 輕量級 高效能的web伺服器及反向 伺服器軟體,同時也是乙個 imap pop3 smtp 伺服器。由 igor sysoev 為俄羅斯訪問量第二的 rambler.ru 站點開發的,伊戈爾 賽索耶夫建立並於2004年首次公開發布,2011年成立同...

儲存過程是什麼?有什麼用?有什麼

儲存過程 stored procedure 是一組為了完成特定功能的 sql 語句集,經編譯後存 儲在資料庫中。使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執 行它。儲存過程是 sql 語句和可選控制流語句的預編譯集合,以乙個名稱儲存並作為乙個 單元處理。儲存過程儲存在資料庫內...