CMake : target_compile_options() vs target_compile_definitions()

标签 cmake

target_compile_options() 之间有什么不同?对比target_compile_definitions()

根据 CMake 文档:

target_compile_options - 添加选项到 COMPILE_OPTIONSINTERFACE_COMPILE_OPTIONS目标属性。

target_compile_definitions - INTERFACE , PUBLICPRIVATE需要关键字来指定以下参数的范围。 PRIVATEPUBLIC项目将填充 COMPILE_DEFINITIONS <target>的属性(property). PUBLICINTERFACE项目将填充 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/

相关文章:

c++ - 创建 CMake 选项组

c++ - CMake:如何将每个资源编译器警告视为错误并抑制特定警告?

cmake - CMake 中的变量列表

c++ - CMake 问题 : could not find any instance of Visual Studio

android - 如何防止 Gradle/Android Studio 覆盖 CMake 提供的 C++ 编译器设置?

c++ - CMake "make install"或在 Windows 中包含一个库

c++ - 将 SFML 静态库链接到项目

c++ - 如何将 cmake 构建库链接到外部代码?

c++ - CMake向目标添加头文件

visual-studio - 如何使用 Visual Studio 和 Eclipse 处理项目