2017-08-14 65 views
4

據我所知,編譯和安裝從源的東西,在Unix系統,涉及的三個步驟是:調用CMake相當於./configure步驟嗎?

1)./configure

2)make

3)make install

當我檢查了安裝OpenCV from source,我注意到它沒有./configure步驟,但它有一個cmake步驟。這讓我覺得cmake相當於./configure。我還讀了cmake可以生成構建系統,如Makefiles,這是./configure步驟所做的。

但是,這個article(見what is the difference?的第一段)說,cmake也執行實際構建。如果是這樣的話,爲什麼OpenCV安裝在cmake之後指示make?另外,我經常看到cmakemake相比,而不是./configure。那麼,cmake究竟適合哪裏?

+0

它不完全說CMake執行構建。也許你指的是「你在選定的構建系統中執行實際構建」的部分?您仍然需要運行'make'或其他生成器來編譯,就像使用autotools一樣。 –

+0

是的。你是對的。由於我對cmake的理解有限,我相信我誤解了這句話。 –

+1

順便說一句,'configure'(shell)腳本不是* NIX/Linux世界中的*規則*;大多數時候它由Autotools生成,有時是「手動」生成的,有時是由其他工具/語言生成的。嚴格來說,這是特定項目所使用的構建系統的問題 - 不是一個規則!有很多軟件包使用純粹的'Makefile'(手工編寫)或其他(meta)構建系統,它們根本沒有'configure'腳本。 – zaufi

回答

3

是的,cmake就像autotools的配置步驟。它本身並不執行構建,而是爲構建(Makefiles,Visual Studio項目等)生成必需的文件。

CMake有--build選項,但這個選項只是調用底層構建系統,所以你不能使用CMake作爲獨立的構建工具。這與普通的Makefiles不同,因爲您可以手動編寫它們,然後將它們寫入它們。

+0

我看到'CMake'的使用比'./configure + autotools'多得多。只學習'CMake'並跳過'autotools'是否明智? –

+3

是的,我會這樣說。 Autotools固定爲Makefiles,並要求Linuxy環境在Windows上運行。另一方面,CMake可以生成VS項目或NMake makefile,這對開發使用它的跨平臺應用程序確實是一種樂趣。 – arrowd

+0

非常感謝! –

1

您提到的文章比較CMake和Make,這是令人困惑的。我傷口區分構建工具,如Make或msbuild,並構建生成器或元生成工具,爲生成工具生成文件,如CMake或Autotools。這兩種工具都可以合併爲一個,就像Waf所做的那樣。

你說得對,一個經典的配置腳本和CMake調用具有相同的功能:它將搜索第三方庫,設置構建系統並準備一個config header

除了GNU項目,CMake獲得了相當的動力。 KDE和Blender是使用CMake的大型項目。在過去的兩年裏,LLVM發生了變化,甚至Boost宣佈它將進行切換。

1

而且作爲附錄贏家答案:

的CMake也可以作爲pkg-config搜索已安裝的CMake啓用,包;-) Check the docs這個模式。

的CMake也支持CLI mode並且能夠在跨平臺的方式來處理文件系統的操作,因此可以被視爲「微型/瑣碎的跨平臺腳​​本工具」 ;-) - 我很高興W /這種模式下,因爲我不需要學習Windows cmd.exe命令,使文件/目錄複製/移動/重命名/ &等,我的「腳本」在Linux和Windows中運行良好... ...

還有可以在server mode中使用它,但是這個功能主要是爲IDE集成適當的CMake文件編輯支持。

比較w/autotools,即開箱即用只支持普通檔案(tarballs),CMake(+ CPack)可以做不同的包裝格式作爲構建結果。我將它用於RPM/DEB/MSI/EXE,併爲NuGet包創建提供了一點幫助。