Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake从Autoconf生成config.h like_Cmake_Autotools - Fatal编程技术网

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@
反而奏效了。虽然答案很好;帮助了我。谢谢