[英]How to force autoconf to not define a macro?
我在构建使用 autoconf 的 C 项目时经常遇到这个问题,所以我正在寻找一种可重复的方法来做到这一点。 我经常有一个库,我想在其中取消定义由undef
在config.h
文件中生成的宏。 例如 - 现在我想确保#define CLOCK_GETTIME 1
生成为#undef CLOCK_GETTIME
。
假设在这个例子中, clock_gettime
是这样检查的。
AC_CHECK_FUNCS([clock_gettime])
过去我手动编辑文件以删除定义。 但我不敢相信没有什么我不能传递给./configure
来覆盖AC_CHECK_FUNCS
的默认行为。
如何更改 autoconf 决定在我的config.h
定义的内容?
./configure 'ac_cv_func_clock_gettime=no'
应该可以工作。 例如:
mkdir foo
cd foo
printf '%s\n' \
'AC_INIT([foo], [0.1])' \
'AC_CONFIG_HEADERS([config.h])' \
'AC_CHECK_FUNCS([clock_gettime])' \
'AC_OUTPUT' \
> configure.ac
autoheader
autoconf
./configure >/dev/null 2>&1 \
&& grep CLOCK_GETTIME config.h
./configure 'ac_cv_func_clock_gettime=no' >/dev/null 2>&1 \
&& grep CLOCK_GETTIME config.h
Output 在我的系统上:
#define HAVE_CLOCK_GETTIME 1
/* #undef HAVE_CLOCK_GETTIME */
由AC_CHECK_FUNC
、 AC_CHECK_FUNCS
和AC_CHECK_FUNCS_ONCE
创建的所有缓存变量都具有官方文档中描述的通用形式:
此宏将其结果缓存在
ac_cv_func_ function
变量中。
以下是更多示例:
ac_cv_func_strcasecmp # AC_CHECK_FUNC([strcasecmp])
ac_cv_func_mempcpy # AC_CHECK_FUNC([mempcpy])
ac_cv_func_pthread_create # AC_CHECK_FUNC([pthread_create])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.