2016-06-24 120 views
4

定義CMake目標時,可以創建別名目標,以便別名可用於在後續命令中引用定義的目標。例如在CMake中使用別名目標

add_library(foo_lib foo.cpp bar.cpp bat.cpp) 
add_library(foo::lib ALIAS foo_lib) 

據我的理解是,這具有名稱foo_lib好好嘗試一下出現一個make目標的優勢。然而,給出了這樣的別名,我想各種屬性設置爲它們如:

set_target_properties(foo::lib PROPERTIES COMPILE_DEFINITIONS ...) 
target_include_directories(foo::lib PUBLIC ... PRIVATE ...) 

,但是這是不可能的不幸,因爲CMake的錯誤:set_target_properties不能別名目標使用。我不明白爲什麼這不應該是可能的,因爲我想定義一次我的lib的名稱,並且每當我想要調整目標的屬性時引用給定的別名。有關如何正確使用ALIAS目標的提示? ALIAS目標的目的除了它們沒有出現在Make目標之外呢?

回答

3

ALIAS類似於「同義詞」。 ALIAS目標只是原始目標的另一個名稱。因此,對於ALIAS目標的要求是不可修改 - 你不能調整其性能,安裝等

一種可能的情況用於創建別名 - 有目標,這概念上與原來的不同 ,但有效地相同(例如,在給定配置中):

if(FOO_USE_SHIPPED) 
    add_library(FOO ...) # Library FOO shipped with our project 
endif() 

... 

# We need FOO_test for testing 
if(FOO_USE_SHIPPED) 
    add_library(FOO_test ALIAS FOO) # Use our library 
else() 
    add_library(FOO_test IMPORTED) 
    set_target_property(FOO_test ...) # Use external library 
endif()