2013-03-29 3 views
2

특정 라이브러리를 검색하는 CMake 스크립트를 작성하고 싶습니다. 먼저 CMake의 Find_PACKAGE()를 사용하고 실패 할 경우 다른 작업을 수행합니다. 나는 FindBLAS.cmake이 (정상적으로이며, CMake의 지난 몇 릴리스 이상에서) 시스템에서 사용 가능한 경우이 잘 작동CMake 모듈이 있는지 확인하십시오.

FIND_PACKAGE(BLAS) 
IF (BLAS_FOUND) 
    # do stuff 
ELSE() 
    # do other stuff 
ENDIF() 

로 시작했다. 더 가짜 뭔가를 찾고 있다면, 내가 먼저 어떻게 HAS_MODULE_* 경우 확인할 수 있습니다 CMake가 이미 그것을 위해 모듈이있는 경우 수행, 즉,

SET(Spurious_FOUND FALSE) 
IF (HAS_MODULE_Spurious) 
    FIND_PACKAGE(Spurious) 
ENDIF() 
IF (Spurious_FOUND) 
    # do stuff 
ELSE() 
    # do other stuff 
ENDIF() 

같은 것을 확인하고 싶습니다?

답변

5

이 기능 같은 것을 사용할 수 있습니다

function(CheckHasModule Module) 
    find_package(${Module} QUIET) 
    if(NOT DEFINED ${Module}_DIR) 
    set(HAS_MODULE_${Module} TRUE PARENT_SCOPE) 
    elseif(${Module}_DIR) 
    set(HAS_MODULE_${Module} TRUE PARENT_SCOPE) 
    else() 
    set(HAS_MODULE_${Module} FALSE PARENT_SCOPE) 
    endif() 
endfunction() 

이 패키지 구성 파일 VAR에 대한 발견되지 않는 경우, 다음 캐시 변수 VAR_DIRVAR_DIR-NOTFOUND로 설정되어 있다는 사실을 사용한다. 따라서 패키지 구성 파일을 찾으면이 변수가 정의되지 않았거나 find_package이 요청한 패키지를 찾았는지 여부에 관계없이 유효한 경로로 설정됩니다.

그래서, 당신이 경우에

CheckHasModule(Spurious) 
CheckHasModule(Threads) 
message("\${HAS_MODULE_Spurious} - ${HAS_MODULE_Spurious}") 
message("\${HAS_MODULE_Threads} - ${HAS_MODULE_Threads}") 

당신의 출력은 다음과 같아야합니다

${HAS_MODULE_Spurious} - FALSE 
${HAS_MODULE_Threads} - TRUE 
+0

잘 아, 나는'QUIET' 인수에 대해 잊어 버렸습니다. –

관련 문제