2017-12-06 5 views
0

를 존재하는지 확인하고 난 내 루트 CMakeLists.txt에서이 작업을 수행하려고 :에 HAVE_MY_SDK를 떠나,CMake는 - 높은 수준의 디렉토리 내가 CMake에 새로운 해요

set(HAVE_MY_SDK OFF) 

if(IS_DIRECTORY "${PROJECT_SOURCE_DIR}../Libs/A") 
    if(EXISTS "${PROJECT_SOURCE_DIR}../Libs/A/CMakeLists.txt") 
     set (HAVE_MY_SDK ON) 
    endif() 
endif() 

현재 CMake 그냥 명령을 피하고 OFF 상태. CMake로 상위 디렉토리를 검사 할 수 있습니까? 아니면 간접적 인 방법으로 할 수도 있습니다.

+0

'add_subdirectory()'를 사용할 수 있는지 확인하려면이 옵션이 필요합니까? – Florian

+0

네, 나중에 해봅시다. 목적이다. – JonOsterman

+1

좋아, 나는 그런 경우라고 생각했다. 내 대답에 내 버전을 추가했습니다. – Florian

답변

1

${PROJECT_SOURCE_DIR} 다음에 /이 누락 된 것 같습니다. 여기에 완성도 부족

내가이 사용하는 코드입니다 (if (EXISTS ...) 전체 경로를 필요가 있습니다) :

(는 "가드되면 추가"를 포함) 내 확장 add_subdirectory() 버전 내부

get_filename_component(_fullpath "${_dir}" REALPATH) 
if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt") 
    ... 

그리고 여기를

function(my_add_subdirectory _dir) 
    get_filename_component(_fullpath "${_dir}" REALPATH) 
    if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt") 
     get_property(_included_dirs GLOBAL PROPERTY GlobalAddSubdirectoryOnceIncluded) 
     list(FIND _included_dirs "${_fullpath}" _used_index) 
     if (${_used_index} EQUAL -1) 
      set_property(GLOBAL APPEND PROPERTY GlobalAddSubdirectoryOnceIncluded "${_fullpath}") 
      add_subdirectory(${_dir} ${ARGN}) 
     endif() 
    else() 
     message(WARNING "my_add_subdirectory: Can't find ${_fullpath}/CMakeLists.txt") 
    endif() 
endfunction(my_add_subdirectory) 
+0

전체 경로를 통해 나는/Users/My/My_Project와 같은 것을 의미한다고 가정하기 때문에 이식성이 떨어질까요? – JonOsterman

+0

@JonOsterman 아니, 그냥 $ {CMAKE_CURRENT_SOURCE_DIR}과 같은 접두사를 붙여야한다는 뜻입니다. 'if (EXISTS ...'는 정의되지 않은 행동을합니다.) – Florian

+0

감사합니다. – JonOsterman