CMake从Autoconf生成config.h like
使用自动工具时,通常会通过在CMake从Autoconf生成config.h like,cmake,autotools,Cmake,Autotools,使用自动工具时,通常会通过在configure.AC中指定AC\u config\u头来生成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 HA
configure.AC
中指定AC\u config\u头来生成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\u A\u FOUND
,Feature\u B\u FOUND
,B\u BITSIZE
configure_file(config.h.in config.h)
这将生成一个类似于自动工具的config.h文件。如果变量未找到或设置为false,则该行将被注释。否则将插入该值。假设Feature\u A\u FOUND=A-NOTFOUND
Feature\u B\u FOUND=/usr/lib/B
,B\u BITSIZE=64
,这将导致
/* #undef HAVE_FEATURE_A @Feature_A_FOUND@ */
#define HAVE_FEATURE_B /usr/lib/b
#define HAVE_FEATURE_BITS 64
可能有_FEATURE_B最好定义为#cmakedefine01
,根据变量的值得出0或1
通常,由于CMake更灵活,所以可以创建由Autotools生成的每个config.h文件。但是它需要更多的工作,并且您无法自动获得config.h,但是您必须自己编写.in文件
文件:
请参阅和文档。\cmakedefine
的可能重复项仅在标识符和值匹配时有效,即\cmakedefine MY_VAR@MY_VAR
按预期工作,但\cmakedefine ABC@MY_VAR
导致/*\unde ABC*/
,因为只有MY_VAR
是一个变量(ABC
不是)。做#define ABC@MY_VAR@
反而奏效了。虽然答案很好;帮助了我。谢谢