2009-03-15 3 views
12

현재 작은 C 프로젝트를 autotools에서 CMake으로 변환 중입니다. 이전 configure.in에서Autotools에서와 같이 CMake에서 헤더 파일과 라이브러리 함수를 확인하는 방법은 무엇입니까?

나는 다음과 같은 라인을 사용하여 존재의 모든 헤더와 라이브러리 기능을 확인 :

# Checks for header files 
AC_HEADER_STDC 
AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h]) 

# Checks for library functions 
AC_FUNC_FORK 
AC_CHECK_FUNCS([time localtime mktime gmtime exit fork chdir atol signal]) 
AC_FUNC_STRFTIME 

그것은 많은 autotools를 프로젝트 AFAIK 할 것입니다.

컴파일러가 이미 필요한 헤더 파일을 검사하고 링커가 라이브러리 함수를 확인 했음에도 불구하고 코드에서 #ifdef HAVE_FOOBAR 등의 컴파일 플래그를 올바르게 설정하려면 구성 단계에서 이러한 코드를 검사해야합니다.

이 경우 CMake로 헤더/함수를 확인하는 가장 좋은 방법은 무엇입니까?

답변

10

CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE 등으로 직접 쉽게 이식 할 수 있습니다. 또한 조언이 필요하면 CMake_HowToDoPlatformChecks을 참조하십시오. 이 스타일로 구성


(즉, 당신이 ucontext.hsetjmp.h 확인하고 하나 개의 선물을 사용 #ifdef HAVE_UCONTEXT 또는 #ifdef HAVE_SETJMP 사용하여 코드를 수정 할 수 있습니다) 이동성을 추가합니다.

또한 응용 프로그램을 배포 할 때 컴파일 오류 (사용자)가 발생하지 않도록하고 좋은 빌드 시스템을 사용하면 응용 프로그램을 배포하기 전에 대부분의 아키텍처 차이를 처리 할 수 ​​있습니다.

프로그래머가 아니더라도 "check for gtk + header - failed"가 동일한 일을 말하는 컴파일 오류 줄이 아니라 gtk를 설치해야하지만 대부분의 경우 읽을 수는 없다는 것을 이해하는 것이 더 쉽습니다 of :

관련 문제