两种不同的 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
使用 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