CMake 和 CPack。配置文件中的安装路径

Posted

技术标签:

【中文标题】CMake 和 CPack。配置文件中的安装路径【英文标题】:CMake and CPack. Install path in config file 【发布时间】:2016-03-29 12:19:06 【问题描述】:

有没有办法使用 CMakeinstallpackage(我需要一个 deb 包)targets /em>,安装路径是从 install-time 中的某个配置文件(例如 /etc/myconfig.cfg)读取的。我可以使用 shell 脚本来做到这一点,但我想使用 CMake 和 CPack 的可能性。我想要一个生成的 deb 包在安装时读取 myconfig.cfg

一个非常简单的启动例子CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
project("My project")
add_executable(a.out main.cpp)

/etc/myconfig.cfg

set(INSTALL_PATH "/var/path1")

INSTALL_PATH = /var/path1

或类似的东西。

【问题讨论】:

【参考方案1】:

为什么不使用CMAKE_INSTALL_PREFIX?例如:

cmake -DCMAKE_INSTALL_PREFIX=/usr/boob ..

【讨论】:

1) 我必须启动 cmake,而不仅仅是 make,才能这样做。 2) 我不希望安装 deb 包的计算机有 cmake、gcc 等依赖项。只有编译的文件必须安装。据我了解,如果可以用 cmake 做这样的 deb 包,它将使用 cmake 脚本中的安装说明。 3)我的实际任务更复杂,很难手动管理。如果我知道如何做这个简单的例子,我会做其他所有事情 1.- 无论哪种方式,您都需要告诉 cmake 如何处理 deb 包的 CONTROL 脚本。我知道你刚刚开始 cmake,但你不能在没有背景的情况下直接跳到你想要或期望做的事情。 2.- 不需要,但您首先需要一些开发人员硬编码来完全自动化该过程。 3.- 手动是唯一的方法,我的朋友。我建议您查看有关 configure_file 的文档和示例,它们或多或少会帮助您迈出第一步。 我正在开发一个快速的 cgi 应用程序。每个新版本都必须安装在带有一些文件的新位置,并在以前的版本运行时启动。然后Web服务器的配置发生变化,必须停止并删除以前的版本。我已经问过这个问题,想知道如何自动化这个过程。我已经以非跨平台的方式使用 shell 脚本完成了此操作,并且希望在使用 cmake 编译项目时完成所有操作。但我不知道如何用 cmake 做某事。很丑。 @РоманКоптев,如果您阅读我给您的文档命令并找到有关它们的示例,您现在应该明白了。 我做到这一点的唯一方法是使用install(CODE|SCRIPT) 并创建add_custom_target(package "$CMAKE_COMMAND" -D -P)。我手动合并这些包,因为在这种情况下 CPack 会生成空包。这是非常丑陋的,尤其是。如果 smb 使用add_subdirectory 命令:install 命令的顺序不被保证;不可能创建自定义目标“安装”。 CMAKE_INSTALL_PREFIXconfigure_files 没用。它们只会在 cmake 启动时执行一次(而不是在目标机器上),然后您在每个 makemake installmake package 使用相同的路径。

以上是关于CMake 和 CPack。配置文件中的安装路径的主要内容,如果未能解决你的问题,请参考以下文章

CMake + CPack:安装整个目录(包括子文件夹)

使用 cmake 或 cpack 编辑 .bat

如何更改使用 CPack 安装的可执行文件的名称?

如何将变量传递给cpack?

InstallDirRegKey 的 CMake/CPack 命令

cmake cpack 安装打包程序