簡體   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