如何使用CMake创建一个安装到' / etc'和' / var'?

时间:2017-12-14 15:33:17

标签: cmake cpack

当我调用时,我已将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.htmlhttps://cmake.org/pipermail/cmake/2006-November/011890.html

0 个答案:

没有答案