2017-11-06 8 views
0

PATHS 옵션을 제공하는 호출이 있습니다. CMake 2.8.12에서는 제공된 경로를 반환하고 CMake 3.7.2에서는 ${CMAKE_SOURCE_DIR} (또는 다른 디렉토리에있는 다른 CMake 내용)을 반환합니다.CMake find_path 동작 변경 CMake 2.8.12 및 3.7.2 간의 변경

find_path (제 3 자) 조각은 다음과 같습니다 다음 NO_DEFAULT_PATH 옵션을 추가하는 작업 힌트를 제공

set(ZLIB_SEARCH_PATH "${PATH_ETC}/src") 
set(ZLIB_SRC_DIR_NAME "zlib") 
set(ZLIB_PATH_INIT "${ZLIB_SEARCH_PATH}/${ZLIB_SRC_DIR_NAME}") 

find_path(ZLIB_PATH 
    NAMES CMakeLists.txt 
    PATHS "${ZLIB_PATH_INIT}" 
    DOC "Location of zLib source") 

Changed find_library behavior from CMake 2.8 to CMake 3.2하지만 그것이 내가 타사를 포함하고있어 나를에 대한 해결책이 아니다 소프트웨어와 나는 변화의 근본 원인을 이해하고 싶습니다. 해제 다음 모든 변수가 비어

주/:

  • CMAKE_LIBRARY_ARCHITECTURE
  • CMAKE_PREFIX_PATH
  • CMAKE_INCLUDE_PATH
  • CMAKE_FRAMEWORK_PATH
  • CMAKE_FIND_ROOT_PATH.

행동 변경이란 무엇입니까? find_path 호출을 "디버그"할 수있는 방법이 있습니까?

+2

보기 정확한'find_path' 전화를. 또는 더 좋게, [mcve], 그래서 우리는 다양한 변수의 수에 대해 추측 할 필요가 없습니다. – Tsyvarev

답변

1

CMake 자체에 디버깅 외에도 find_path 호출 메서드가 "디버깅되지"않습니다.

검색 순서는 용도에 따라 변경되지 않았습니다. 내가 발견 할 수있는 유일한 관련 커밋은 "find_*: Fix search order when the environment duplicates some HINTS"입니다. PATHSHINTS 키워드로 바꾸고 더 나은 결과가 나오는지 확인해보십시오.

위의 호출이 자신의 코드 일 경우 이미 경로 (ZLIB_PATH_INIT)를 알고있을 때 find_path을 사용하지 마십시오. 코드가 당신이 아닌 경우

, 당신은 항상 검색 목록에서 로컬 파일을 제거 CMAKE_IGNORE_PATH를 사용할 수 있습니다

list(APPEND CMAKE_IGNORE_PATH "${CMAKE_SOURCE_DIR}") 
+0

감사합니다. Florian, 모든 대답 부분이 적용됩니다. PATHS를 HINTS로 바꾸면 문제가 해결되고 $ {CMAKE_SOURCE_DIR}이 (가) CMAKE_IGNORE_PATH에 추가됩니다. 마지막으로 find_path는 타사 CMake 시스템에서 기본 zip 대신 다른 zlib를 사용할 수 있도록 사용됩니다. –

+0

필자는 결국 PATHS를 HINTS로 대체하여 CMake find_path 문서의 권장 사항 인 "힌트 (HINTS) 옵션으로 지정된 경로를 검색하십시오."는 힌트와 같이 시스템 내부 검사에 의해 계산 된 경로 여야합니다. 이미 발견 된 다른 항목의 위치 하드 코딩 된 추측은 PATHS 옵션으로 지정해야합니다 ". –

+1

@RolandSarrazin 안녕하세요. 그리고 제 3 자 소프트웨어에 대해서 나는 또 다른 이슈를 제기 할 것입니다. 단지'CMakeLists.txt '를 찾는 것만으로는'ZLIB'와 관련이 없습니다. 그것은 무엇이든을 찾아 낼 수 있었다. '$ {ZLIB_SEARCH_PATH}/$ {ZLIB_SRC_DIR_NAME}/CMakeLists.txt'가 실행되지 않으면 CMake의 ['FindZLIB module'] (https://cmake.org/cmake/help/latest/module/FindZLIB.html) 존재하지 않습니다. – Florian