cmake configure_file函数补充说明。

发布时间 2023-08-30 15:35:08作者: 星小梦

configure_file中出现了#cmakedefine#define用法,看完没有明白实际的区别。

这是2011年也有同样问题的人发的email的答复


实例cmake配置

#cmakedefine TEST_VAR "${VAR}"
#cmakedefine01 VAR
...
set(VAR "Hello World")
...
configure_file(xxx.h.in xxx.h)
...

具有以下区别:
#define定义在xxx.h.in文件中,具有以下输出

#define TEST_VAR "Hello World"
#define VAR 1

如果set函数没有定义VAR变量,则是以下输出

/* #undef TEST_VAR */
/* #undef VAR */

说明:
#define VAR [val] 定义的宏会始终出现,取得变量不仅限于cmake变量。
#cmakedefine VAR <val> 会根据所引用得变量存在有2中情况,例子已经说明了。
#cmakedefine01 VAR 会根据VAR所代表得cmake变量是否存在,存在则会#define VAR 1,否则是#define VAR 0

问题:
#define和#cmakedefine所引用得变量的范围不一样,对PROJECT_BINARY_DIR变量,只有#define能取到值,原因未知。