2012-10-07 29 views
3

我正在學習/審查CMake,因爲我正在考慮將我們的代碼遷移到它。我們目前的make系統做了很多事情,就是「子項目」通用代碼文件。例如,我們有很多共享的通用頭文件(加上一些c/cpp文件),這些文件包含在我們創建的每個項目中。我想在CMake中複製這個,但我沒有看到一個簡單的方法。準確地說,我想要做的事,如:CMake:「subprojecting」文件的最佳方法

家長的CMakeLists.txt

add_subdirectory(shared_folder shared_build_folder) 

#Next line should somehow add in the files reference in the shared_folder 
add_executable([specific files for this project] build_folder) 

兒童的CMakeLists.txt(shared_folder)

#Somehow have a list of files here that get added to the parent project 

到目前爲止,我已經找到這樣做的各種「方法」,但都似乎有點hacky。我得出的結論是,這實際上是我必須做事情的方式,而CMake並不真正適應這種發展方式。爲了清楚起見,我的大多數解決方案都涉及到在父級別創建一個由文件列表組成的變量。這個變量(通過一些shenanigans)可以通過/從任何子項填充,然後當我調用add_exectuable時,我使用該變量來添加文件。

我所有的解決方案都涉及不少宏/函數,看起來相當多的開銷。這是別人試過的嗎?任何關於這樣做的最佳方法的線索?

感謝 安德魯

回答

1

我們面對完全一樣的問題和哭泣,我們接受了CMake的路,它導致結構更好的項目,即使這意味着要改變我們的結構的某些部分的一段時間後。

當使用子目錄時,一旦處理了add_subdirectory陳述,目標會自動導出到整個項目中(即使在後續的其他add_subdirectory調用中):包含公共代碼的子項目正在創建庫。

也有PARENT_SCOPE您可以使用變量導出到父的CMakeLists.txt

「其他」的事情,我們通過包括.cmake-文件與include主要的CMakeLists.txt模擬FindPackage機制。在這樣做的時候,我們可以很容易地提供變量,更改include_directories並在項目中做其他奇特的事情。因爲在cmake變量之間沒有依賴關係,所以我們不使用cmake來配置源(項目的特性),而只是構建(編譯器,包含,庫...)。這種分裂是我們構建系統重構的關鍵元素。