2011-08-20 28 views

回答

72

有如何(續)沒有自動該工具可以將任意構建系統從autotools轉換爲cmake。我已經手動轉換了一些中等大小的項目。我喜歡爲每組configure.ac和/或Makefile.am文件創建一個CMakeLists.txt文件,以簡化從autotools到cmake的轉換。

不幸的是,這種手動方法需要在兩個系統中開發專業知識,其中任何一個都不應該造成任何無辜。

  1. 記錄您的機器上實際執行的自動工具創建的內容。這將幫助您驗證您的CMake構建系統是否使用相同的編譯標誌實際編譯每個文件,並創建autotools執行的每個庫和可執行文件;至少在你的機器上,有你的選擇。

    %的./configure [配置選項]> configure_autotools.log

    %化妝> make_autotools.log

    %使安裝> make_install_autotools.log

  2. 在每一個目錄包含一個configure.acMakefile.am文件,包括項目根目錄,新建一個空的CMakeLists.txt文件。將cmake add_subdirectory(...)命令添加到每個非葉CMakeLists.txt文件,以將所有cmake文件鏈接到樹結構中。將cmake project()和cmake_minimum_required()命令添加到頂級CMakeLists.txt文件的頂部。

    project(MyProject) 
    cmake_minimum_required(VERSION 2.8) 
    add_subdirectory(foo) 
    
  3. 您現在有一個一致的,但沒用的CMake構建系統,什麼也不做。在更深的CMakeLists.txt文件中臨時添加一些message(...)命令以驗證所有內容是否正確連接。請記住,在調試cmake配置問題時,message()是您的朋友。確保您的cmake基礎架構通過現在嘗試構建而工作。什麼都不會建立或安裝;但此時鍛鍊cmake基礎設施很有價值。

    %的mkdir build_cmake

    %CD build_cmake

    %ccmake -i [項目根]

    [配置,配置,生成]

    %使VERBOSE = 1

    %make install

  4. 這是最難的部分。逐個填寫您的CMakeLists.txt文件。下面是一些指導原則:

    • 打開兩個並排側編輯器,一個用的CMakeLists.txt文件,其他與相應的Makefile.am/configure.ac文件。

    • 讓您的瀏覽器開啓至cmake commands documentation

    • 而不是從最頂部開始,通過建立一個小型圖書館或可執行文件,如果你能找到一個項目(cmake的add_library()add_executable())創建cmake的規則開始。使用這種方法,您可以一次構建您的轉換。

    • 在添加每個目標時,定期測試您的cmake構建系統。

    • 我喜歡使用cmake file(GLOB ...)命令來緊湊地創建源文件列表。請注意,這是一個有爭議的觀點。

    • 許多常見的自動工具節都有相應的CMake commands。例如autoconf AC_TRY_COMPILE可以轉換爲cmake TRY_COMPILE。但大多數情況下,我發現我必須瞭解每個小自動工具節所做的事情,並弄清楚如何編寫相應的cmake。此外,還有一個series of CMake modules可幫助創建類似於autotools的config.h文件。 Makefile.am文件通常更易於轉換,並且在轉換爲cmake之後實際上可以變得更緊湊。

    • 將您的cmake生成結果與您在步驟1中捕獲的autotools日誌進行比較。編譯標誌是否相同?是否所有的目標都是相同的?是否安裝了相同的文件?

    • 不幸的是,我最近沒有將autotools轉換爲cmake,所以我不能全面地編寫「如果您在Makefile.am中看到x,請在CMakeLists.txt中編寫y」。有人可以爲公開wiki提供一個好的位置,那些正在積極從autotools轉換到cmake的人可以積累一套完整的這樣的指南嗎?我不知道這是否計算器的回答是這樣的列表最好的地方......

  5. 對於額外的信用,一旦你擁有這一切的工作,調整你的cmake的規則,能夠構建和運行您的項目從Windows Visual Studio。嘗試用autotools!

+4

我不想要一個自動工具。這是我正在尋找的那種確切的討論和一般建議。例如,「我喜歡爲每組configure.ac和Makefile.am文件創建一個CmakeLists.txt firl」。如果你能詳細說明這一點,我會獎賞你的獎金。 –

+1

@KurtisNusbaum:我編輯了我的答案,詳細闡述了我所經歷的過程,包括步驟和更多指導方針。這樣更有用嗎? –

+2

這是迄今爲止我見過的最好的。不過,我真的很想看到「如果你在Makefile.am中看到x,請在CMakeLists.txt中寫下y」。如果有人發現,請告訴我。 –