我正在尝试CPack
的{{1}}模块,并且出现了一些令人困惑的行为。我有CMake
包含在根CpackMylib.cmake
中。它看起来如下:
CMakeLists.txt
运行include(CPack) #included on top
install (TARGETS mylib
LIBRARY
DESTINATION /usr/lib
COMPONENT mylib-all
)
install (DIRECTORY include/
DESTINATION /usr/include/mylib
COMPONENT mylib-all)
set(CPACK_PACKAGE_NAME "mylib")
set(CPACK_GENERATOR "DEB")
时,它无法使用以下跟踪信息创建软件包:
make package
看起来它只是忽略了我放在Run CPack packaging tool...
CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: mylib
CPack: - Install project: mylib
CMake Error at /home/krjoff/mylib/cmake_install.cmake:55 (file):
file INSTALL cannot copy file "/home/krjoff/mylib/libmylib.so" to
"/usr/lib/mylib.so".
CMake Error at /home/krjoff/mylib/cmake_install.cmake:73 (file):
file INSTALL cannot set permissions on "/usr/include/mylib"
CPack Error: Error when generating package: mylib
Makefile:129: recipe for target 'package' failed
make: *** [package] Error 1
之后的所有变量,并试图构建一些include(CPack)
软件包并立即安装。但是,如果在完成所有配置后将STGZ
放在include(CPack)
的末尾,它就可以正常工作。
有人可以解释为什么在所有配置设置之后都必须放置CpackMylib.cmake
吗?
答案 0 :(得分:1)
CPack
应该是这样工作的。当您在include
中对其进行CMakeLists.txt
时,它会读取its documentation中列出的所有变量,例如CPACK_GENERATOR
或CPACK_PACKAGE_NAME
并为您创建package
目标然后致电make package
。
如果在设置这些变量之前将其包括在内,则它们的值将被忽略。
在您的
CPack
文件中包含此CMakeLists.txt
模块之前,可以设置各种变量来定制生成的安装程序。最常用的变量是:
CPACK_PACKAGE_NAME
程序包(或应用程序)的名称。如果未指定,则默认为项目名称。
CPACK_PACKAGE_VENDOR
包供应商的名称。 (例如“ Kitware”)。默认值为“人类”。
CPACK_PACKAGE_DIRECTORY
CPack正在打包的目录。如果未设置,则默认为(内部)构建目录。可以在CPack配置文件中或从cpack命令行选项-B中定义此变量。如果设置,则命令行选项将覆盖在配置文件中找到的值。...