CMake:target_compile_options() 与 target_compile_definitions()
CMake : target_compile_options() vs target_compile_definitions()
target_compile_options()
和 target_compile_definitions()
有什么区别?
根据 CMake 文档:
target_compile_options
- 添加选项到 COMPILE_OPTIONS
或 INTERFACE_COMPILE_OPTIONS
目标属性。
target_compile_definitions
- 需要 INTERFACE
、PUBLIC
和 PRIVATE
关键字来指定以下参数的范围。 PRIVATE
和 PUBLIC
项将填充 <target>
的 COMPILE_DEFINITIONS
属性。 PUBLIC
和 INTERFACE
项将填充 <target>
的 INTERFACE_COMPILE_DEFINITIONS
属性。
但我不知道使用哪一个以及何时使用。
使用 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
的使用一般不要加在这个地方;它只是用作众所周知的编译器标志的示例...
target_compile_options()
和 target_compile_definitions()
有什么区别?
根据 CMake 文档:
target_compile_options
- 添加选项到 COMPILE_OPTIONS
或 INTERFACE_COMPILE_OPTIONS
目标属性。
target_compile_definitions
- 需要 INTERFACE
、PUBLIC
和 PRIVATE
关键字来指定以下参数的范围。 PRIVATE
和 PUBLIC
项将填充 <target>
的 COMPILE_DEFINITIONS
属性。 PUBLIC
和 INTERFACE
项将填充 <target>
的 INTERFACE_COMPILE_DEFINITIONS
属性。
但我不知道使用哪一个以及何时使用。
使用 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
的使用一般不要加在这个地方;它只是用作众所周知的编译器标志的示例...