【问题标题】:CMake generate config.h like from AutoconfCMake 从 Autoconf 生成 config.h
【发布时间】:2016-07-17 09:39:33
【问题描述】:

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

AC_CONFIG_HEADERS([config.h])

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

【问题讨论】:

标签: cmake autotools


【解决方案1】:

您必须创建一个类似于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_FOUNDFeature_B_FOUNDB_BITSIZE 并调用

configure_file(config.h.in config.h)

这将产生一个类似于自动工具中的 config.h 文件。如果未找到变量或将其设置为 false,则该行将被注释。否则将插入该值。假设Feature_A_FOUND=A-NOTFOUND¸Feature_B_FOUND=/usr/lib/bB_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

【讨论】:

  • #cmakedefine 仅在标识符和值都匹配时有效,即 #cmakedefine MY_VAR @MY_VAR@ 按预期工作,但 #cmakedefine ABC @MY_VAR@ 导致 /* #undef ABC */,因为只有 MY_VAR 是一个变量(ABC 不是't)。相反,做#define ABC @MY_VAR@ 工作。很好的答案;帮助过我。谢谢!
猜你喜欢
  • 2017-08-28
  • 2010-12-21
  • 2011-08-17
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多