2014-05-12 2 views
1

VS 프로젝트에서 패킷 생성기를 실행하려고하면 대상 및 파일에서 설치시 절대 경로를 사용하기 때문에 컴파일하는 동안 충돌이 발생합니다.CPack NSIS, Windows 용 설치 프로그램 생성

ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ... 

모든 설치 디렉토리는 상대적입니다.

set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin) 
set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib) 
set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext) 
... 

이 CMAKE/CPACK는 절대 경로로 그 변수를 해석 않습니다 나는 {PROJECT_BINARY_DIR}이 같은 (상대해야하는) $의 하위 폴더와 같은 변수 꽤 많이 설정? 그렇다면 CPack이 이러한 변수로 제대로 작동하도록하는 방법이 있습니까? 하위 상대 경로가 포함 된 경우 어떻게 CPack을 사용합니까?

감사

답변

0

내가보고 좋아는 $ {PROJECT_BINARY_DIR}는 그것의 모든 하위 폴더가 거부됩니다 거기에서, 절대 경로로 해석됩니다.

나는 다음과 같이 다른 블록의 경우 변수를 설치하고 포장의 경우는 다음의 경우 상대 폴더가 사용됩니다 둘러싸인이 문제를 방지하려면이 그것을 해결

if(PACK) 
    set(INSTALL_DIR bin) 
    set(LIB_DIR bin/lib) 
    set(EXT_DIR /bin/ext) 
    ... 
else(PACK) 
    set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin) 
    set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib) 
    set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext) 
    ... 
endif(PACK) 

을, 그러나 그것은이다 정말 더러운, 새로운 CPack 버전에서 더 나은 기능을 기다리고 있습니다. 이 치명적인 오류가 의미

0

챠오는 사용자가 설치 프로그램을 실행할 때 설치 루트 순간에 지정해야합니다 말할 수 있습니다.

INSTALL (TARGET myApp DESTINATION ${SOME_INSTALL_PATH}/bin) 

당신이 SOME_INSTALL_PATH cmake 캐시가 생성되는 절대 경로를 지정하는 경우, 당신은 금지 DESTINATION를 설치하는 당신에게 "절대 경로를 준 CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION 오류를 발생 (:이 같은 코드가있을 수 있습니다 귀하의 cmake의 설정 어딘가에서 생각 호출자) "메시지가 표시됩니다.

이 문제를 해결하려면 항상 DESTINATION 설치에 상대 경로를 사용하거나 SOME_INSTALL_PATH 변수에 패키지 접두어 만 할당하십시오.

참고로 다음은 INSTALL 명령에 대한 링크입니다. http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.html

CMake 메일 링리스트에 비슷한 질문이 있습니다. http://public.kitware.com/pipermail/cmake/2013-May/054656.html