2011-07-15 82 views
13

我一直對CMake-CPack近一週感到沮喪。CMake-CPack軟件包安裝路徑噩夢

壞事是CMake-CPack在線文檔沒有很好地記錄這部分。

谷歌搜索後,我發現這個變量來使用:

CPACK_PACKAGING_PREFIX   # NOT documented 
CMAKE_INSTALL_PREFIX   # Documented, but the behavior seems weird 
CPACK_INSTALL_PREFIX   # NOT documented 
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described 
CPACK_PACKAGING_INSTALL_PREFIX # NOT documented 

我所試圖做的是:包使用fakeroot make package,當包由sudo dpkg -i MyProgramPackageName安裝Debian軟件包,將其安裝到/usr/local,與一個子目錄MyProgramPackageName。也就是說,所有文件都應該安裝在/usr/local/MyProgramPackageName-V.1.2.3之下。

我一直在嘗試(CMake 2.8.3和CMake 2.8.5)來調整這些變量。我嘗試了這麼多組合,但失敗了。

成功的唯一途徑是:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3) 

但這個變量甚至沒有記錄在案,並且行爲不能得到保證。如果您對我的問題感到困惑,請告訴我何時使用CPACK_PACKAGE_INSTALL_DIRECTORY?因爲關於這個變量的文檔描述非常有吸引力,而且它確實是我想要的,但我無法讓它工作。

請告訴我。

彼得

回答

0

由CPACK使用的路徑來自於你的CMakeLists.txt文件INSTALL指示服用。這使得結果包能夠反映'make install'會做什麼。這將CPACK配置保持在最低限度。

所以,從一個實例的CMakeLists.txt文件:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin) 

這將安裝到/ usr/bin中或/ usr/local/bin目錄。如果你想將它放在一個子目錄或完全不同的一個,你可以做在這裏

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir) 
+0

我很困惑。我正在使用CPACK將其打包,以便將應用程序安裝到我想要的位置。在'INSTALL'指令中,我總是將一個或多個文件夾安裝到INSTALL_PREFIX/DIRECTORY的相對路徑中。 –

+2

您只需要安裝目標中的相對路徑 - 它將自動相對於CMAKE_INSTALL_PREFIX進行安裝,無需指定。指定絕對路徑是將所有這些安裝的東西弄糟的便捷方式。 –

9

我沒有找到任何文件來支持這一點,但我確實發現了一些bug報告和電子郵件歸檔,似乎建議以下是你應該做的事情:

set(CPACK_SET_DESTDIR true) 
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)

如果未設置CPACK_INSTALL_PREFIX,則默認爲CMAKE_INSTALL_PREFIX。現在,來自install(... DESTINATION dest)的相對路徑將在您的軟件包文件中以CPACK_INSTALL_PREFIX/dest結尾。這工作時,我試圖生成一個deb文件。

+0

我會在下週一嘗試你的建議,並讓你知道結果。謝謝。 –

+2

爲我工作,謝謝。 – usr1234567