使用Autotools时,通过在config.h
中指定AC_CONFIG_HEADERS
宏来生成configure.ac
文件是很常见的:
AC_CONFIG_HEADERS([config.h])
使用CMake时,相应的等价物是什么?
答案 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_FOUND
,Feature_B_FOUND
,B_BITSIZE
并致电
configure_file(config.h.in config.h)
将导致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
可能HAVE_FEATURE_B最好定义为#cmakedefine01
,导致0或1,具体取决于变量的值。
通常可以创建Autotools生成的每个config.h文件,因为CMake更灵活。但它需要更多的工作,你不能自动获得config.h,但你必须自己编写.in文件。
文档: https://cmake.org/cmake/help/v3.6/command/configure_file.html