[英]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.