gpt4 book ai didi

cmake - 如何排除一个目标的编译选项?

转载 作者:行者123 更新时间:2023-12-04 15:35:57 24 4
gpt4 key购买 nike

我在我的顶级 CMakeLists.txt 中有这个:

set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG" )

现在,我意识到应该排除一个目标 -march=native -mtune=native。最简单的方法是什么?显然,我可以使用 target_compile_options() 设置这些选项对于除一个目标之外的所有目标,但肯定有更简洁的方法吗?

最佳答案

在现代 CMake 中,手动操作 CMAKE_<LANG>_FLAGS_<CONFIG> 变量通常是 discouraged .最好使用 add_compile_options() 设置这些和 add_compile_definitions() ,并且您可以使用生成器表达式来控制哪些选项适用于调试或发布配置。

注意:有了这个add_compile_options()语法,用分号分隔标志/选项 ;因为您使用的是 GCC;如果您使用的是 Visual Studio 的 VC++ 编译器,空格应该可以正常工作。

add_compile_definitions("$<$<CONFIG:RELEASE>:NDEBUG>")    
add_compile_options("$<$<CONFIG:RELEASE>:-O3;-march=native;-mtune=native>")

如果您还有一些不同的调试选项,您可以添加这些选项:

add_compile_options(
"$<$<CONFIG:RELEASE>:-O3;-march=native;-mtune=native>"
"$<$<CONFIG:DEBUG>:-O2;-march=something-else>"
)

然后,您的编译标志将可以通过目标属性访问 COMPILE_OPTIONS ,您可以使用 string(REPLACE ...) 删除特定目标不需要的标志:

get_target_property(MyLib_COMPILE_OPTIONS MyLib COMPILE_OPTIONS)
if(MyLib_COMPILE_OPTIONS)
string(REPLACE "-march=native" "" MyLib_COMPILE_OPTIONS "${MyLib_COMPILE_OPTIONS}")
string(REPLACE "-mtune=native" "" MyLib_COMPILE_OPTIONS "${MyLib_COMPILE_OPTIONS}")
set_target_properties(MyLib PROPERTIES COMPILE_OPTIONS "${MyLib_COMPILE_OPTIONS}")
endif()

关于cmake - 如何排除一个目标的编译选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59733496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com