target_compile_options()
之间有什么不同?对比target_compile_definitions()
?
根据 CMake 文档:
target_compile_options
- 添加选项到 COMPILE_OPTIONS
或 INTERFACE_COMPILE_OPTIONS
目标属性。
target_compile_definitions
- INTERFACE
, PUBLIC
和 PRIVATE
需要关键字来指定以下参数的范围。 PRIVATE
和 PUBLIC
项目将填充 COMPILE_DEFINITIONS
<target>
的属性(property). PUBLIC
和 INTERFACE
项目将填充 INTERFACE_COMPILE_DEFINITIONS
<target>
的属性(property).
但我不知道使用哪一个以及何时使用。
最佳答案
使用 target_compile_definitions
来定义预处理器宏,使用 target_compile_options
来定义其他标志。
对于 target_compile_definitions
cmake 能够根据使用的编译器选择合适的编译器标志。此外,您还可以保存 -D
:
示例
target_compile_definitions(MyTarget PRIVATE
ADD_DEBUG_PRINTS=1
ABCDE
)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(MyTarget PRIVATE -Wall)
endif()
注意-Wall
的使用通常不应该加在这个地方;它只是用作众所周知的编译器标志的示例...
关于CMake : target_compile_options() vs target_compile_definitions(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71855535/