CMake从Autoconf生成config.h

时间:2016-07-17 09:39:33

标签: cmake autotools

使用Autotools时,通过在config.h中指定AC_CONFIG_HEADERS宏来生成configure.ac文件是很常见的:

AC_CONFIG_HEADERS([config.h])

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

1 个答案:

答案 0 :(得分:8)

您必须创建类似于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文件类似于autotools中的文件。如果未找到变量或将其设置为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