CMake는 로컬 파일이 있는지 확인합니다.
내 CMake 스크립트에서 내 시스템에 파일이 있는지, 파일이 있는지 확인하고 싶습니다. 그렇지 않으면 기본 파일로 작업을 수행합니다. 다음은 코드입니다.
find_file(
${project_name}_${customer}_config
${ROOT}/configuration/${customer}/configuration.${project_name}.xml
)
if(NOT ${${project_name}_${customer}_config} STREQUAL
${project_name}_${customer}_config-NOTFOUND )
configure_file(${ROOT}/configuration/${customer}/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
else()
configure_file(${FAPP_ROOT}/configuration/Default/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
endif()
그러나 이것은 작동하지 않는 것 같습니다.
CMake에 파일이 있는지 확인하는 적절한 방법은 무엇입니까?
파일의 전체 경로 이름을 이미 알고있는 경우 파일이 있는지 확인하는 올바른 방법은 다음과 같습니다.
if(EXISTS "${ROOT}/configuration/${customer}/configuration.${project_name}.xml")
...
else()
...
endif()
그냥 사용할 수 있어야합니다
if(NOT ${project_name}_${customer}_config)
로부터 문서 :
if(<constant>)
상수가 1, ON, YES, TRUE, Y 또는 0이 아닌 숫자이면 참. 상수가 0, OFF, NO, FALSE, N, IGNORE, ""이거나 접미사 '-NOTFOUND'로 끝나는 경우 False입니다.
그러나을 사용하여 파일 을 찾으면 find_file
값이 캐시되고 후속 CMake 실행에서 다시 찾으려고 시도하지 않습니다. 모든 실행에 대해 강제로 다시 확인하려면 find_file
호출 하기 전에 다음을 수행하십시오.
unset(${project_name}_${customer}_config CACHE)
나는 이것이 if (EXISTS <path>)
좋은 해결책 이라고 믿습니다 . 대부분의 경우이 시나리오에 관심이 없겠지만 최근에 만난 시나리오를 공유하고 싶습니다.
유효한 사용자가 파일에 액세스 할 수없는 경우이 솔루션은 true를 반환하지 않습니다. 파일이 존재하지만 읽을 수 없습니다.
파일이 실제로 존재하는지 여부에 관심이있는 경우이 시나리오의 해결 방법은 execute_process(COMMAND ls /dev/fb0 RESULT_VARIABLE result OUTPUT_QUIET ERROR_QUIET)
다음 result
과 같이 호출 한 다음 확인하는 것입니다.
if (result)
message("/dev/fb0 doesn't exist.")
endif()
편집 : 추가 ERROR_QUIET
에 execute_process
나 파일이 존재하지 않을 때 당신은 LS에서 오류 메시지를 받게됩니다.
참조 URL : https://stackoverflow.com/questions/13067401/cmake-check-that-a-local-file-exists
'programing' 카테고리의 다른 글
이동 / 드래그 가능 (0) | 2021.01.17 |
---|---|
Symfony2 기본 컨테이너 서비스 목록이 있습니까? (0) | 2021.01.17 |
경고 : 지정된 대상이 없습니다. 에뮬레이터에 배포 (0) | 2021.01.16 |
Docker 공용 레지스트리 푸시 실패 : 저장소가 없습니다. (0) | 2021.01.16 |
PHP 7에서 MySQLi 확장을 활성화하는 방법은 무엇입니까? (0) | 2021.01.16 |