我有一些现有的cmake文件,其中接口库用于将大量编译选项填充到另一个目标中。在我的一个目标中,我想排除这些选项中的一个,并不触及其他选项。
我尝试使用***get_target_property/set_target_property***,但很遗憾,没有找到它们正确用法
有人知道如何从***test_project***中删除选项(例如/we 4800)吗?
cmake_minimum_required (VERSION 3.8)
add_library(common_compile_options INTERFACE)
set_property(TARGET common_compile_options PROPERTY INTERFACE_COMPILE_OPTIONS
/we4309
/we4800
)
add_executable (test_project "main.cpp")
target_link_libraries(test_project common_compile_options)
====更新1====:
我试了试也跟着变通:
cmake_minimum_required (VERSION 3.8)
add_library(common_compile_options INTERFACE)
set_property(TARGET common_compile_options PROPERTY INTERFACE_COMPILE_OPTIONS
/we4309
/we4800
)
get_target_property(CACHE_PROPERTY common_compile_options INTERFACE_COMPILE_OPTIONS)
string(REPLACE "/we4800" "" TEMP_PROPERTY "${CACHE_PROPERTY}")
add_executable (project "main.cpp")
target_link_libraries(project common_compile_options)
set_property(TARGET project PROPERTY COMPILE_OPTIONS ${TEMP_PROPERTY})
get_target_property(PROJECT_PROPERTY project COMPILE_OPTIONS)
message("New properties: " ${PROJECT_PROPERTY})
在cmake输出中,我得到了预期的消息:
New properties: /we4309
但是/we 4800选项仍然传递给编译器:(
1条答案
按热度按时间hsvhsicv1#
我找到了可行的解决方案,但问题是,它会在所有情况下都有效吗?