两种不同的 CMake 定义

Two different CMake difinitions

使用 CMake 定义某些定义时,它们是这样定义的:

add_definitions(-DMY_DEFINITION)

有时我看到人们用不同的方式来定义:

add_definitions(-DMY_DEFINITION=1)

那么我的问题是它们在生成的C++项目中有什么区别。谢谢。

这与 CMake 无关,但与 C/++ 编译器有关。 在代码中,区别是相同的:

#define MY_DEFINITION

#define MY_DEFINITION 1

实际上,如果您只想知道宏是否存在(已定义),则无需为 C/++ 宏定义值,例如 "flag"。最好的例子是 header include guards :

#ifndef MYHEADER
#define MYHEADER
// ...
#endif

但有时人们更喜欢设置一个值(如 =1),即使他们不需要它,因为它更详尽或更清晰。

更一般地说,当您影响宏的值时,是因为您希望宏名称扩展为该值。如果不是,您只是期望该值存在。完成测试的方式可能不同:

与-DMY_DEFINITION:

#ifdef MY_DEFINITION
    // Do something
#else
    // Do somthing else
#endif

与-DMY_DEFINITION=1

#if MY_DEFINITION
    // Do something
#else
    // Do somthing else
#endif