2012-07-17 101 views
3

簡介:
有誰知道是否可以在包含在所有子模塊中的CMake中添加custom_target?一個例子就是如何將Install/Run_Tests/Package目標添加到構建中的每個子模塊。如何爲所有子模塊添加CMake自定義目標

更多詳細信息:
我的情況是,對於一個目錄結構如:

 
Project 
    --CMakeLists.txt 
    --SubMod A 
     --CMakeListsA.txt 
    --SubMod B 
     --CMakeListsB.txt 

我想爲doxygen的產生custom_target添加到頂級的CMakeLists.txt文件,並有包括在子模塊A和B.所有模塊之間的命令完全相同。

我可以將custom_target添加到每個子模塊的cmake文件,但這似乎是錯誤的。與此有關的另一個問題是,如果我有CMake生成Visual Studio解決方案,將與現有的「doc」項目(如果打開頂級解決方案)發生衝突。 CMake提供的目標足夠聰明,不會被包含兩次。

回答

2

我認爲你可以做的最好的做法是將add_custom_target封裝在頂層CMakeLists.txt中定義的函數中,並在每個CMakeLists.txt中使用它。

爲了避免重複目標名稱的問題,你可以定義的函數是這樣的:

function(AddDoxygenTarget) 
    add_custom_target(Doxygen${PROJECT_NAME} ...) 
endfunction() 

這取決於有project命令每個子模塊的的CMakeLists.txt。如果沒有,你可以使用每個子目錄的名稱:

get_filename_component(SubDirName ${CMAKE_CURRENT_LIST_DIR} NAME) 
    add_custom_target(Doxygen${SubDirName} ...) 
+0

嗯,這確實解決了大部分問題,但並不是真正理想。不過,我不完全相信有一個更好的答案,我預計會有所幫助。 – JMcCarty 2012-07-17 21:03:42

+0

@JMcCarty是的,確實可能有更好的方法。我忍不住想看看Kitware的其中一個人是否在鳴響。 – Fraser 2012-07-17 21:17:12

+0

看起來沒有其他人插嘴,這確實完成了我想要的大部分內容。謝謝 – JMcCarty 2012-07-24 12:18:01

相關問題