使用 CPack 在 Mac 上打包系统守护进程

Posted

技术标签:

【中文标题】使用 CPack 在 Mac 上打包系统守护进程【英文标题】:Packing a system daemon on Mac with CPack 【发布时间】:2019-01-15 12:30:42 【问题描述】:

我正在尝试在 Mac 上创建系统范围的服务,使用 CMake 进行构建,使用 CPack 生成包。存储库很大,所以我创建了一个较小的版本来测试它。事实证明,我不知道如何打包具有绝对路径作为目的地的东西。

这是 CMake 代码:

install(PROGRAMS $CMAKE_BINARY_DIR/hello
        DESTINATION "/var/local/hello"
        COMPONENT TS
      )

install(PROGRAMS com.hello.world.plist
        DESTINATION "/Library/LaunchDaemons/"
        COMPONENT TS
      )

这是 cpack 的输出

mac-mini-2:build melanoholly$ cpack ..
CPack: Create package using productbuild
CPack: Install projects
CPack: - Run preinstall target for: testingPack
CPack: - Install project: testingPack
CMake Error at /Users/salvobit/sandbox/cpack-example-mac-daemon/build/cmake_install.cmake:44 (file):
  file cannot create directory: /var/local/hello.  Maybe need administrative
  privileges.


CMake Error at /Users/salvobit/sandbox/cpack-example-mac-daemon/build/cmake_install.cmake:56 (file):
  file INSTALL cannot copy file
  "/Users/salvobit/sandbox/cpack-example-mac-daemon/com.hello.world.plist" to
  "/Library/LaunchDaemons/com.hello.world.plist".


CPack Error: Error when generating package: testingPack

如果我以 root 身份运行 cpack,生成的包是空的。

有人可以告诉我如何解决这个问题吗?

我使用3.13.0-rc2版本的CMake。

【问题讨论】:

据我所知,CPack 不喜欢absolute 安装路径。不要在 install 命令的 DESTINATION 选项中使用绝对路径。 【参考方案1】:

解决这个问题的关键是指定CMAKE_INSTALL_PREFIX

set(CMAKE_INSTALL_PREFIX "/")

当你这样做时,你可以在/var/ 中安装路径

install(PROGRAMS <binary>
        DESTINATION "../var")

【讨论】:

以上是关于使用 CPack 在 Mac 上打包系统守护进程的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X sudo docker 无法连接到 Docker 守护程序。 docker 守护进程是不是在此主机上运行?

使用 CPack 打包时是不是需要 CMake 安装步骤?

CPack打包多个包

向 cpack 添加额外的命令 - NSIS 打包程序/安装程序

CPack 文件列表与文件系统冲突

Mac 开机自启动