【发布时间】:2009-08-18 18:53:11
【问题描述】:
我们研究小组的一部分程序具有ctemplate 库提供的辅助功能。在我们过时的集群上,由于编译,我们无法构建软件,所以我想分离这个功能并通过configure标志控制是否包含它,例如--disable-ctemplate。
该软件用 C++ 编写,使用 Autotools 构建系统——我对这两个系统都没有太多经验。我的理解是,要完成这个任务,我需要做到以下几点:
通过在
configure.ac中创建一个新的AC_ARG_ENABLE条目,向配置脚本添加一个新标志。在使用
ctemplate库的代码以及调用该代码的任何代码周围添加一些#ifdef(或可能是#ifndef)语句。
我认为第一步应该是这样的:
AC_ARG_ENABLE(ctemplate,
[ --disable-ctemplate Disable HTML output],
[case "${enableval}" in
yes) ctemplate=false ;;
no) ctemplate=true ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-ctemplate) ;;
esac],[ctemplate=true])
AM_CONDITIONAL(NOCTEMPLATE, test x$ctemplate = xfalse)
虽然我不知道逻辑是否正确,因为我已经根据使用 --enable-FLAG 而不是 --disable-FLAG 的示例改编了这个示例。
对于第二步,我会将部分包装在预处理器标志中,例如
#ifndef NOCTEMPLATE
void Class::MethodUsingCtemplate(...)
{
...
}
#endif
如果我这样做了configure --disable-ctemplate,这会正确地“连接”所有内容吗?
另外,这是否会确保程序不会进入ctemplate 库进行编译?如果没有,那么这一切都是徒劳的;我必须阻止 ctemplate 库和依赖组件的编译。
我将重申我对 C++ 和 Autotools 都不熟悉;我采取了一种非常幼稚的第一种方法来解决这个问题。如果您在这方面有经验,我将非常感谢您的更正和您可以提供的任何解释。
【问题讨论】:
-
+1。这应该在 Autotools 手册中,而不是要求人们将其拼凑在一起,在邮件列表或 Stack Overflow 上查找。
标签: configuration build-process autotools