是否有方法创建安装和软件包(我需要一个deb软件包)目标使用*CMake***,其中安装路径是从某个配置文件中读取的**(例如/etc/myconfig. cfg)。我可以使用shell脚本完成此操作,但是我希望使用CMake和CPack的可能性。我希望生成一个deb包,以便在安装时读取myconfig.cfg
startCMakeLists.txt的一个非常简单的示例:
cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR)
project("My project")
add_executable(a.out main.cpp)
/etc/我的配置文件:
set(INSTALL_PATH "/var/path1")
或:
INSTALL_PATH = /var/path1
或者类似的东西。
2条答案
按热度按时间q3qa4bjr1#
为什么不使用CMAKE_INSTALL_PREFIX?例如:
eni9jsuy2#
我知道这个问题和山一样古老...
Apt(或RPM,或许多其他包类型)不可能实现您的建议--因此cpack也不能提供这些工具。
原因是软件包应该描述它将安装到系统中的东西--最重要的是,如果软件包被卸载,或者如果它的后续版本不再包含旧版本中的文件,它将删除的东西。你可以理解,如果配置文件可以改变软件包在系统中的登陆方式,这将是不可能的,因为安装后配置可能会改变。使得不可能进行文件的持续维护。
你所要求的对于一个软件包来说有些“非标准”,对于运行系统来说有些问题。
1.为您期望的每个安装变体创建一个包
1.创建一个包,然后使用安装后的Bash脚本执行所有需要的路径创建/调整
1.使用一个软件包来“集中”地放置文件,然后使用配置管理(Ansible、Puppet、Chef等)来完成剩余的工作。
就个人而言,我推荐选项3。选项1工作量很大,选项2很“混乱”,因为管理员将留下一大堆不属于任何软件包的文件和目录。使卸载变得困难。它还鼓励创建一些Bash脚本,这些脚本很难维护,很可能不会执行它们所执行的操作。在所有部署包的地方都应该这样做。
第三个选项让系统管理员控制,他们将知道系统上有什么,如果需要删除什么,等等。