2009-10-27 2 views
2

AC_CACHE_CHECK를 어떻게 재설정해야합니까?AC_CACHE_CHECK를 어떻게 재설정해야합니까?

autoconf에서 헤더를 확인하고 있습니다. 기본 경로에 없을 수도있는 표준 폴더의 헤더 파일을 찾기가 좀 더 힘들어하는 논리를 추가했습니다. 이 방법은 기본 제공 AC_CHECK_HEADER 헤더 파일을 찾는 첫 번째 시도입니다. 헤더가 발견되지 않으면 CPPFLAGS를 수정하고 다시 시도하십시오.

이 문제는 autoconf의 캐싱 문제입니다. 나는 체크를 강제하고 싶다. (또는 캐쉬 체크를 바이 패스한다.) autoconf가 헤더를 찾았는지 아닌지를 강제하지 않으면 첫 번째 체크에서 찾은 것을 끌어 올 것이다. 같은 ac_cv_header_syslog_h 같은

감사합니다, Chenz

+0

답변이 없습니까? –

답변

2

설정 해제 캐시 변수. 관심있는 캐시 변수의 정확한 철자에 대해서는 config.log을 확인할 수 있습니다. 불행히도 쉘 변수를 설정 해제하면 이식 할 수 없습니다. Autoconf에서 사용하는 내부 해결 방법은 $as_unset이며 지원되는 경우 unset으로 확장됩니다. 그래서 당신은 쓸 수 :이 요즘 가장 합리적인 시스템에서 작동해야

$as_unset ac_cv_header_syslog_h 

하지만.

첫 번째 확인을 위해 CPPFLAGS을 올바르게 설정하는 것이 더 쉽고 간단한 해결책 일 수 있습니다. 당신이 주목 한 것처럼, 당신이 시도하는 것은 실제로 지원되지 않습니다.

+0

코멘트 주셔서 감사합니다. autoconf 스타일의 AS_UNSET ([var_name]) 함수를 사용하는 것이 좋습니다. 나는'AC_CHECK_HEADERS'의 맨 위에 내 자신의 함수를 코딩하고 있는데 문제는 미리 변수 이름을 알지 못한다는 것입니다 (그러나 헤더는 알고 있습니다). 나는 그 이름을 재구성 할 필요가 있다고 생각한다. 당신은 무엇을 추천 할 수 있습니까? –

+0

@PeterEisentraut AC_CACHE_CHECK의 캐시 된 결과의 용도가 무엇인지 궁금합니다. – Bionix1441

2

저는 작은 매크로를 구현했습니다. 그 매크로는 작업을 수행합니다 (적어도 나를 위해). 작은 변화로 다른 캐시 변수를 무효로 할 수 있습니다 :이 루프 $ 1 = 일부 라이브러리 (예 : "netpbm"), $ 2 (

# SYNOPSIS 
# 
# AX_RESET_HEADERS_CACHE(headers ...) 
# 
# DESCRIPTION 
# 
# This macro invalidates the headers cache variables created by previous AC_CHECK_HEADER/AC_CHECK_HEADERS checks. 
# 
AC_DEFUN([AX_RESET_HEADERS_CACHE], [ 
    AS_FOR([AX_var], [ax_var], [$1], [ 
     dnl You can replace "ac_cv_header_" with any prefix from http://www.gnu.org/software/autoconf/manual/html_node/Cache-Variable-Index.html 
     AS_VAR_PUSHDEF([ax_Var], [ac_cv_header_${ax_var}]) 
     AS_UNSET([ax_Var]) 
     AS_VAR_POPDEF([ax_Var]) 
    ]) 
]) # AX_RESET_HEADERS_CACHE 

및 사용을 = 헤더 (예 : "pbm.h의 ppm.h"), $ 3 = 위치 (예 : "/ usr/include/usr/local/include")) :

for ac_test_location in $3 
do 
    dnl Save the current state 
    ax_probe_library_save_CPPFLAGS=${CPPFLAGS} 

    CPPFLAGS="$CPPFLAGS -I${ac_test_location}" 

    AC_MSG_CHECKING([$1 for $2 in ${ac_test_location}]) 
    AS_ECHO() 
    _AS_ECHO_LOG([CPPFLAGS="${CPPFLAGS}"]) 

    AC_CHECK_HEADERS([$2], [ac_lib_$1=yes], [ac_lib_$1=no]) 

    dnl We have found the location, leave the loop: 
    if test "${ac_lib_$1}" = "yes" 
    then 
     break; 
    fi 

    dnl Restore the state to original in case of unsuccessful attempt 
    CPPFLAGS=${ax_probe_library_save_CPPFLAGS} 
    AX_RESET_HEADERS_CACHE([$2]) 
done