【发布时间】:2019-04-26 12:16:20
【问题描述】:
我正在尝试使用 CMake 的 CPack 模块并得到一些令人困惑的行为。我有 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 的末尾,它就可以正常工作了。
有人能解释一下为什么必须在所有配置设置之后加上include(CPack) 吗?
【问题讨论】:
-
@YSC 有点,是的。但这绝对不是一个可取的行为。此外,它会尝试安装默认的
STGZ包,我将其覆盖为DEB。 -
@YSC 当然,正如我提到的,在所有变量都按预期设置后包括
CPack。我只是对这种行为感到好奇...... -
我的坏......