我正在尝试CPack
module ofCMake
并得到一些令人困惑的行为。我已将CpackMylib.cmake
其包含在 root 中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")
Run Code Online (Sandbox Code Playgroud)
并且在运行时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
Run Code Online (Sandbox Code Playgroud)
看起来它只是忽略了我在之后放置的所有变量include(CPack)
,并尝试构建一些STGZ
包并立即安装它。但是,如果我将其放在include(CPack)
所有CpackMylib.cmake
配置完成之后,它就可以正常工作。
有人可以解释为什么有必要将include(CPack)
所有配置设置放在后面吗?
这就是应该如何工作CPack
。当您include
在您的 中时,它会读取其文档CMakeLists.txt
中列出的所有变量(如或 )并创建您然后调用的目标。CPACK_GENERATOR
CPACK_PACKAGE_NAME
package
make package
如果在设置这些变量之前包含它,它们的值将被忽略。
\n\n\n\n\n\n在将此
\n\nCPack
模块包含到CMakeLists.txt
文件中之前,可以设置各种变量来自定义生成的安装程序。最常用的变量是:\n
\n- \n
CPACK_PACKAGE_NAME
\n 包(或应用程序)的名称。如果不指定,则默认为项目名称。- \n
CPACK_PACKAGE_VENDOR
\n 软件包供应商的名称。(例如,\xe2\x80\x9cKitware\xe2\x80\x9d)。默认值为 \xe2\x80\x9cHumanity\xe2\x80\x9d。- \n
CPACK_PACKAGE_DIRECTORY
\n CPack 进行打包的目录。如果未设置,则默认(内部)为构建目录。该变量可以在 CPack 配置文件中或从 cpack 命令行选项 -B 中定义。如果设置,命令行选项将覆盖配置文件中找到的值。- \n
...
归档时间: |
|
查看次数: |
6214 次 |
最近记录: |