簡體   English   中英

了解CMake,make和GCC的角色

[英]Understanding roles of CMake, make and GCC

1. cmake是來自CMake軟件的命令:為構建自動化系統做准備; make和make install是來自Make software:build automation system的命令。

2.從閱讀這個帖子 ,我的理解是:

一個。 這個“cmake和make”的東西實際上在其實現中使用g ++ / gcc。 cmake和make stuffs基本上只是使用g ++ / gcc的工具。 那是對的嗎?

gcc / g ++是執行實際工作的編譯器。

C。 所以我可以直接使用gcc / g ++而不使用make和CMake的東西?

3.根據此stackoverflow 答案 :CMake獲取CMakeList.txt文件,並將其輸出為特定於平台的構建格式,例如Makefile,Visual Studio等。

但是當我遇到這個 openCV安裝時:

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

它在沒有CMakeLists.txt文件的目錄中執行cmake命令。 你能解釋一下這個嗎?

4,我已經看到通常的步驟是: cmakemakesudo make install 我讀了這篇stackoverflow 文章 ,我明白了:

(i) make是用於建設項目。

(ii) make install是將二進制文件/可執行文件復制到已安裝的目錄中。

一個。 所以當我們make ,結果/二進制文件/可執行文件存儲在哪里?

如果我們只運行make而不make install ,是否意味着不生成文件?

C。 我遇到了這個openCV 教程,關於使用openCV和GCC以及CMake。 它用:

cd <DisplayImage_directory>
cmake .
make

為什么不make install呢?

5.總結:

  • CMake接受CMakeList.txt文件(跨平台)生成Makefile(特定於平台)。

  • 我可以手動編寫Makefile並跳過CMake步驟。 但是最好使用CMake步驟,因為它是跨平台的,否則如果我改變平台,我必須再次重寫Makefile。

  • Make Make Makefile(由CMake生成或手動編寫)作為編譯和構建的指南。 Make基本上在其工作中使用gcc / g ++或其他編譯器。 使自己只是編譯器的工具。

  • make install將結果/可執行文件放入安裝路徑

CMake為其他構建系統生成文件。 這些可以是Visualfile或Eclipse等IDE的Makefile,Ninja文件或項目文件。 構建文件包含對GCC,Clang或cl.exe等編譯器的調用。 如果安裝了多個編譯器,則可以選擇一個。
這三個部分都是獨立的。 編譯器,構建系統和CMake。

當你有歷史時,它更容易理解。 人們使用他們的編譯器 隨着時間的推移,添加了這么多標志,每次輸入它們都很麻煩。 所以把調用放在腳本中。 由此構建系統(Make,Ninja)進化而來。
人們想要支持多個平台,編譯器,場景等,並且構建系統文件變得難以維護並且它們的使用容易出錯。 這就是人們發明元構建系統的原因,它為實際的構建系統創建了文件。 例如Autotools或CMake。

  1. CMake不使用你的編譯器,make沒有實現它,但它調用(使用)編譯器。
  2. CMakeLists.txt文件應位於release的父目錄中。 CMake調用的最后一個參數表示路徑是CMakeLists.txt文件所在。
  3. 是的,make在build目錄中生成文件。 在您的示例中3. release是構建目錄。 您可以找到所有生成的文件並使用它們。 安裝是可選的,特別是如果您要開發軟件,則不安裝它。
  4. 嘗試為大型項目編寫Makefile,你會看到它有多少工作。 但是,5中的所有內容都是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM