假设在我的CMakeLists.txt中有:
check_function_exists(getopt HAVE_GETOPT)
configure_file(config.h.in config.h @ONLY)在config.h.in中,我有:
#cmakedefine HAVE_GETOPT @HAVE_GETOPT@
#cmakedefine STDLIB_HAS_GETOPT @HAVE_GETOPT@我希望能看到
#define HAVE_GETOPT 1
#define STDLIB_HAS_GETOPT 1在传球之后。相反,我得到了:
#define HAVE_GETOPT 1
/* #undef STDLIB_HAS_GETOPT */为什么行为上有区别?
备注:
发布于 2018-01-26 16:33:00
要获得所需的行为,不要使用cmakedefine,而是使用cmakedefine01 (注意后面的01)。在你的例子中:
#cmakedefine01 HAVE_GETOPT @HAVE_GETOPT@
#cmakedefine01 STDLIB_HAS_GETOPT @HAVE_GETOPT@文档:file.html
发布于 2018-01-26 16:43:10
对于#cmakedefine,您不能在第二个参数中使用不同的变量,然后在第一个参数中使用不同的变量。您必须在运行STDLIB_HAS_GETOPT之前定义configure_file。
check_function_exists(getopt HAVE_GETOPT)
set(STDLIB_HAS_GETOPT HAVE_GETOPT)
configure_file(config.h.in config.h @ONLY)发布于 2018-01-26 16:20:15
文档 for configure_file是明确的:
..。表格的输入行:
#cmakedefine VAR ...将改为:
#define VAR ...或者:
/* #undef VAR */取决于是否在CMake中设置VAR .
只有VAR的值才有意义,它之后的一切都与CMake在#define和#undef之间的选择无关。
正因为如此,#cmakedefine HAVE_GETOPT被转换为#define,但是#cmakedefine STDLIB_HAS_GETOPT被转换为#undef (因为在CMake代码中没有设置变量STDLIB_HAS_GETOPT )。
https://stackoverflow.com/questions/48464610
复制相似问题