CMake从Autoconf生成config.h

lan*_*oxx 7 autotools cmake

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

AC_CONFIG_HEADERS([config.h])
Run Code Online (Sandbox Code Playgroud)

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

usr*_*567 10

你必须创建一个类似的文件config.h.in.就像是

#cmakedefine HAVE_FEATURE_A @Feature_A_FOUND@
#cmakedefine HAVE_FEATURE_B @Feature_B_FOUND@
#cmakedefine HAVE_FEATURE_BITS @B_BITSIZE@
Run Code Online (Sandbox Code Playgroud)

然后,你必须声明变量Feature_A_FOUND,Feature_B_FOUND,B_BITSIZE在你的CMake的代码和呼叫

configure_file(config.h.in config.h)
Run Code Online (Sandbox Code Playgroud)

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

/* #undef HAVE_FEATURE_A @Feature_A_FOUND@ */
#define HAVE_FEATURE_B /usr/lib/b
#define HAVE_FEATURE_BITS 64
Run Code Online (Sandbox Code Playgroud)

可能会更好地定义HAVE_FEATURE_B,#cmakedefine01其结果为0或1,具体取决于变量的值.

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

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