2015-05-29 84 views
0

我有一個自定義目標,我希望它依賴於默認目標(使用make構建的目標)。CMake默認構建目標的名稱是什麼?

add_custom_target(foo ....) 
add_dependency(foo default_target_name_goes_here) 

默認目標的名稱是什麼?

我試過ALLALL_BUILDMyProjectsNameDEFAULT,...

查找CMake的文檔中的任何東西總是不成功的冒險...

UPDATE:看來CMake的目的是在這樣的這是一個非常難以修復/實施的方式:bugreport getting +1's since 2009。誰確實希望有一個自定義目標取決於例如all目標?或換句話說:誰寫過make && make test?...

回答

2

在CMake配置時,默認的構建目標不作爲CMake目標存在。它只存在於生成的構建系統中。因此,不可能讓默認目標取決於自定義目標。

+0

「使用ALL選項」:這將我的目標添加到ALL。我想將ALL作爲依賴項添加到我的目標中。這是無法完成的。 2009年有一個bugreport /功能要求:http://public.kitware.com/Bug/view.php?id=8438 – gnzlbg

+0

將你的問題改爲「我希望默認目標依賴它」。 – sakra

+0

我的問題的第一句話裏有什麼不清楚的地方:「我有一個自定義目標,我希望它依賴於默認目標」? – gnzlbg

0

我認爲一個可能的解決方案強烈依賴於用例。例如。如果這是爲了在系統建立後執行測試,您將使用CTest而不是直接調用make

要你的CMakeLists.txt你可以這樣:

add_test(NAME foo COMMAND ...) 

然後用CTest建設和執行:

ctest --build-and-test ... 

更廣泛地說,不考慮你爲什麼會喜歡這個問題做到這一點 - 我認爲最好的辦法就是命名並依賴具體的目標依賴關係,而不是僅僅採取ALL目標 - 我只是想增加兩種可能性來做你想做的事情。

一個將確定/跟蹤所討論的所有目標列表here。這看起來像例如圖書館的目標是這樣的(讓你自己/私人GlobalTargetList):

macro(add_library _target) 
    _add_library(${_target} ${ARGN}) 
    set_property(GLOBAL APPEND PROPERTY GlobalTargetList ${_target}) 
endmacro() 

,並在你的主要的CMakeLists.txt結束與

get_property(_allTargets GLOBAL PROPERTY GlobalTargetList) 
add_dependencies(foo ${_allTargets}) 

編輯使用它:全球BUILDSYSTEM_TARGETS財產被釋放與CMake 3.7

第二個不太有利的方法確實需要foo目標不是ALL構建的一部分(否則你在無盡的循環中結束):

add_custom_target(foo) 
set_target_properties(foo PROPERTIES EXCLUDE_FROM_ALL 1) 

add_custom_command(
    TARGET foo 
    PRE_BUILD 
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ALL_BUILD --config $<CONFIGURATION> 
) 
+0

默認情況下,CMake喜歡將所有內容放入ALL目標(例如外部項目)。構建任何東西通常需要首先構建ALL目標:我寧願編寫'make tests'而不是'make && make tests'。隨着目標數量的增加,這個問題會變得更糟。用戶定義的目標不能依賴於任何內建目標:ALL,INSTALL,...我找到的「最簡單」的解決方案是收集添加到ALL的任何東西到不同的目標中,然後添加依賴到這些目標。不舒服,但工作。 – gnzlbg

+0

如果你正在引用'include_external_msproject()'命令,我承認我已經修補了我的CMake 2.8.10版本,默認將'EXCLUDE_FROM_ALL'屬性設置爲'TRUE'(請參閱'cmIncludeExternalMSProjectCommand.cxx')。我通常更喜歡將'EXCLUDE_FROM_ALL'設置爲'TRUE'(例如通過相應的目錄屬性)。這允許在複雜的構建環境中選擇性地僅編譯特定目標及其依賴項。但是,當我正確設置了跨目標依賴時,它對我來說很好(包括使用並行生成引擎的環境)。 – Florian

+0

其實我是指「ExternalProject_Add」,但是,「EXCLUDE_FROM_ALL」是一個更好的默認值:) – gnzlbg

相關問題