2014-05-12 204 views
1

我試圖在VS項目中運行數據包生成器,它在編譯時崩潰,因爲從目標和文件安裝時使用絕對路徑。CPack NSIS,爲Windows生成安裝程序

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

我檢查了兩次,所有的安裝目錄都是相對的。我設置了很多的變量的$子文件夾{} PROJECT_BINARY_DIR(這應該是相對的),例如:

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解釋這些變量作爲絕對路徑? 如果是這樣,有沒有辦法讓CPack正確地使用這些變量? 如何在涉及子相對路徑時使用CPack?

感謝

回答

0

好吧,我看到的,$ {} PROJECT_BINARY_DIR被解釋爲絕對路徑,從那裏的所有子文件夾都將被拒絕。

爲了避免這個問題,我包圍,如果else塊安裝變量,如果是包裝的話,那麼將使用一個相對的文件夾,如下所示:

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

這個致命的錯誤是爲了告訴你安裝根目錄應該在那一刻,當用戶執行安裝程序中指定。我猜某處你的cmake配置可能有這樣的代碼:

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

如果分配SOME_INSTALL_PATH時產生的CMake緩存中的絕對路徑,也導致了CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION錯誤,它給你的「絕對路徑安裝目的地禁止(通過調用者)「消息。

要解決此問題,要麼始終使用安裝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