2012-09-27 16 views
3

CMake很棒,特別是有很多模塊(FindOOXX)。但是,當編寫一個FindXXX模塊時,您的項目所依賴的庫XXX,對於非cmake專家來說並不容易。我有時會遇到一個沒有CMake支持的圖書館,我喜歡爲它做一個。我想知道在編寫/測試cmake模塊時是否有任何交互式shell?cmake中是否有任何用於模塊開發的交互式shell?

回答

1

您是否正在爲項目「XXX」寫入FindXXX,或者您正在嘗試查找項目的依賴項是否爲「XXX」?如果是前者,則應該編寫一個名爲XXX-config.cmake(或XXXConfig.cmake)的文件,並將其安裝到find_package文檔中提及的其中一個目錄中。一般而言,XXX-config.cmake文件適用於CMake可以找到的項目(由項目本身安裝),FindXXX.cmake文件適用於不支持CMake的項目(通常必須支持查找任何版本的XXX)。

這就是說,對於FindXXX.cmake,通常你只需要幾個find_file(例如,對於頭)一些find_library,電話,甚至只是從FindPkgConfig.cmake一個pkg_check_module後跟一個find_package_handle_standard_args電話(使用include(FindPackageHandleStandardArgs)得到它)。 FPHSA使編寫適當的查找模塊變得輕而易舉。

對於XXX-config.cmake文件,我通常使用configure_file生成兩個版本:一個用於安裝(包括你的install(EXPORT)文件),一個用於構建樹(由export()調用生成)。使用這個,可以精確地設置其他有用的變量,比如「Boost使用的是哪個確切版本」或「Python是否支持編譯」,以便依賴項目可以更好地瞭解依賴關係的樣子。

我最近還發現,CMake附帶了CMakePackageConfigHelpers模塊,它應該可以幫助製作這些文件。看起來有相當多的文件。

+0

感謝您的全面迴應。我正在爲一個不支持CMake的項目尋找一個'FindXXX'。我應該讓我的問題更清楚。 – Drake

相關問題