当我调用时,我已将CMake(3.02)安装到DESTDIR:
$ make -C build DESTDIR=$(pwd)/build/rootfs install
这会产生一个我满意的文件布局:二进制文件位于.../build/rootfs/usr/local/bin
目录中,init脚本位于.../build/rootfs/etc/init.d
中。为了实现这一点,我在CMakeLists.txt
文件中使用了相对和绝对路径的混合:
set(CPACK_SET_DESTDIR ON)
...
INCLUDE(CPack)
...
set(ROOTFS_BIN_DIR bin)
set(ROOTFS_ETC_INITD_DIR /etc/init.d)
...
INSTALL(TARGETS myDaemon DESTINATION ${ROOTFS_BIN_DIR})
INSTALL(PROGRAMS myDaemon.sh RENAME myDaemon DESTINATION ${ROOTFS_ETC_INITD_DIR})
有了这个,我想' work',我试图创建一个简单的tarball包,它最终将成为debian包(带有安装前/后安装/删除脚本)但是当我调用时:
$ make -C build DESTDIR=$(pwd)/build/rootfs package
我收到错误是因为cpack
正在尝试将我的初始化脚本写入系统的/etc/init.d
目录(而不是$(pwd)/build/rootfs/etc/init.d
)。如果我想要,那么$sudo !!
将解决问题。错误(替换为...
的完整路径):
CMake Error at .../build_src/cmdServer/cmake_install.cmake:44 (file):
file INSTALL cannot copy file
".../src/cmdServer/cmdServer.sh" to
"/etc/init.d/cmdServer".
我没有使用很多CPACK
指令:在我的顶级CMakeLists.txt
文件中我有:
SET(CPACK_SET_DESTDIR ON)
SET(CPACK_GENERATOR TGZ)
INCLUDE(CPack)
如何正确打包我的初始化脚本?
我一直在引用: https://cmake.org/pipermail/cmake/2008-April/020833.html 和https://cmake.org/pipermail/cmake/2006-November/011890.html