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_FOUND
、Feature_B_FOUND
、B_BITSIZE
并调用
configure_file(config.h.in config.h)
这将导致 config.h 文件类似于自动工具中的文件。如果未找到变量或将其设置为 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
使用 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_FOUND
、Feature_B_FOUND
、B_BITSIZE
并调用
configure_file(config.h.in config.h)
这将导致 config.h 文件类似于自动工具中的文件。如果未找到变量或将其设置为 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