CMake 像 Autoconf 一样生成 config.h

CMake generate config.h like from Autoconf

使用 Autotools 时,通常通过在 configure.ac 中指定 AC_CONFIG_HEADERS 宏来生成 config.h 文件,如下所示:

AC_CONFIG_HEADERS([config.h])

使用 CMake 时相应的等价物是什么?

您必须创建一个类似于 config.h.in 的文件。像

#cmakedefine HAVE_FEATURE_A @Feature_A_FOUND@
#cmakedefine HAVE_FEATURE_B @Feature_B_FOUND@
#cmakedefine HAVE_FEATURE_BITS @B_BITSIZE@

然后你必须在你的CMake代码中声明变量Feature_A_FOUNDFeature_B_FOUNDB_BITSIZE并调用

configure_file(config.h.in config.h)

这将导致 config.h 文件类似于自动工具中的文件。如果未找到变量或将其设置为 false,则该行将被注释。否则将插入该值。假设 Feature_A_FOUND=A-NOTFOUND¸ Feature_B_FOUND=/usr/lib/bB_BITSIZE=64,这将导致

/* #undef HAVE_FEATURE_A @Feature_A_FOUND@ */
#define HAVE_FEATURE_B /usr/lib/b
#define HAVE_FEATURE_BITS 64

可能 HAVE_FEATURE_B 定义为 #cmakedefine01 会更好,根据变量的值,结果为 0 或 1。

一般来说,可以创建由 Autotools 生成的每个 config.h 文件,因为 CMake 更灵活。但它需要更多的工作,你不能自动得到一个config.h,你必须自己编写.in文件。

文档: https://cmake.org/cmake/help/v3.6/command/configure_file.html