我使用CMake的FetchContent
包含了一个依赖项,需要使用一些构建标志(cmake -DFLAG=ON
)来构建它。
这个问题在here中也会被问到,提供的答案似乎是使用set
在当前作用域上设置一个变量,例如set(FLAG ON)
。
我的问题:* * 是否有一种方法可以在不污染示波器的情况下实现相同的效果?**
我尝试过使用set_target_properties
或target_compile_options
,但没有成功。如果我在FetchContent_MakeAvailable
之后调用它们,它们将不起作用,如果我在之前调用它们,则目标将不存在,并抛出错误。
include(FetchContent)
FetchContent_Declare(
Dependency
GIT_REPOSITORY ...
GIT_TAG ...
)
set(FLAG ON) # This works, but pollutes the scope. I only want this flag to take effect on "Dependency"
# set_target_properties(Dependency PROPERTIES FLAG ON) # This won't work (error)
# target_compile_options(Dependency PUBLIC -DFLAG=ON) # This won't work either (error)
FetchContent_MakeAvailable(Dependency)
# set_target_properties(Dependency PROPERTIES FLAG ON) # This has no effect
# target_compile_options(Dependency PUBLIC -DFLAG=ON) # This has no effect
1条答案
按热度按时间4uqofj5v1#
我不知道这应该是一个回答还是一个评论,但是您可以使用以下模式来避免污染范围: