[英]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,我已經看到通常的步驟是: cmake
, make
, sudo 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。
release
的父目錄中。 CMake調用的最后一個參數表示路徑是CMakeLists.txt文件所在。 release
是構建目錄。 您可以找到所有生成的文件並使用它們。 安裝是可選的,特別是如果您要開發軟件,則不安裝它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.