Autotools에서처럼 CMake에서 헤더 파일과 라이브러리 기능을 확인하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/647892

  •  22-07-2019
  •  | 
  •  

문제

현재 작은 C 프로젝트를 변환 중입니다. 자동 도구 에게 CMake.

옛날에는 configure.in 다음 줄을 사용하여 모든 헤더와 라이브러리 함수가 존재하는지 확인했습니다.

# 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로 헤더/함수를 확인하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

다음을 사용하여 쉽게 직접 포팅할 수 있습니다. CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE, 등.또한 참조하십시오 CMake_HowToDoPlatformChecks 조언을 구합니다.


이 스타일로 구성하면 이식성이 추가됩니다(예: ucontext.h 그리고 setjmp.h 존재하는 것을 사용하여 코드를 수정하십시오. #ifdef HAVE_UCONTEXT 또는 #ifdef HAVE_SETJMP).

또한 애플리케이션을 배포할 때 (사용자의 경우) 컴파일 오류가 발생하는 것을 방지하고 싶으므로 좋은 빌드 시스템을 사용하면 앱을 배포하기 전에 대부분의 아키텍처 차이를 처리할 수 있습니다.

프로그래머가 아닌 사람은 "gtk+ 헤더 확인 - 실패"가 발생하면 동일한 내용을 말하지만 대부분 읽을 수 없는 컴파일 오류 줄이 많이 생기기보다는 gtk를 설치해야 한다는 것을 이해하기가 더 쉽습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top