아래의 간단한 CMake 스크립트를 사용해 가상의 theheader.h
C 헤더 파일을 찾으십시오. 내가 아는 한, 이것은 FindXXX.cmake
모듈에있는 라이브러리의 include 디렉토리를 찾는 일반적인 방법입니다.CMake가 PATH에서 라이브러리를 찾지 못하도록 함.
PATH="/home/cschreib/someapp/bin:$PATH"
이 밝혀 :
cmake_minimum_required(VERSION 2.6)
project(test)
find_path(
TEST_INCLUDES
NAMES "theheader.h"
)
message(STATUS "TEST_INCLUDES: ${TEST_INCLUDES}")
지금이 CMake 스크립트 관련이없는 방식으로, 내가 정의 bin
디렉토리를 포함하도록 내 PATH
환경 변수 (I 리눅스를 실행하는거야) 편집 한, 그 가정 디렉토리 /home/cschreib/someapp/include
이 존재하고 theheader.h
이라는 파일이 있습니다. 이 헤더는 someapp
을 빌드하기 위해 로컬로만 사용되었지만 다른 프로그램에서 사용하도록 의도 된 것은 아닙니다 *.
CMake 3.3 이전에는 CMake에서이 사용자 지정 위치를 찾지 못했습니다. 그러나 버전 3.3부터 CMake는 똑똑 해지기 위해 $PATH
의 모든 디렉토리에 대해 include
을 bin
으로 바꿉니다. 따라서 CMake 3.3 (이상)은이 사용자 지정 디렉터리에서 theheader.h
을 찾습니다. 이것은 결코 의도 된 것이 아니기 때문에 헤더와 공유 객체 버전이 일치하지 않는 등 모든 종류의 문제가 발생합니다.
내가 에 NO_SYSTEM_ENVIRONMENT_PATH
옵션을 사용하여 $PATH
을 보지 못하게 할 수 있지만이 문제에 대한 좀 더 일반적인 해결책을 찾고 있습니다. 사실이 문제는 모든 라이브러리에서 발생할 수 있습니다. 필자가 필요로하는 모든 FindXXX.cmake 모듈의 사본을 만들 수 있었고 체계적으로 NO_SYSTEM_ENVIRONMENT_PATH
옵션을 추가했지만, 나는 이것을 피하고 싶습니다.
이 원치 않는 기능을 끄는 데 사용할 수있는 글로벌 스위치가 있습니까? 아니면 다른 방법으로?
* : 누군가가 이에 대해 의견을 말하기 전에. 나는 이것이 좋은 습관이 아니라는 것을 알고있다. 또한 지역 사회에서 사람들은 선한 방법과 나쁜 방법을별로 신경 쓰지 않는 경향이 있다는 것을 알고 있습니다.이 상황은 매우 일반적입니다. 커뮤니티를 변경하지 않을 것이므로, CMake 스크립트를 나쁜 습관에 견뎌야합니다.
그들은 그것을 다시 바 꾸었습니다. 나는 그 때 업그레이 드를 위해 갈 것이다. 감사. – Kalith