繁体   English   中英

如何强制 autoconf 不定义宏?

[英]How to force autoconf to not define a macro?

我在构建使用 autoconf 的 C 项目时经常遇到这个问题,所以我正在寻找一种可重复的方法来做到这一点。 我经常有一个库,我想在其中取消定义由undefconfig.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_FUNCAC_CHECK_FUNCSAC_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM