cmake:安装可执行文件并创建指向它们的链接

Laz*_*abs 5 cross-platform cmake

我正在使用cmake和cpack来构建我的项目并构建包.我创建我的项目数的可执行文件,让我们给他们打电话EXE1EXE2.

在创建这些可执行文件的不同版本时,我想命名以反映可执行文件的版本(比方说EXE1_1.0.0).我可以通过执行更改目标的输出名称set_target_properties.

但是,现在在做的时候install,我想创建一个符号链接到这个可执行文件的版本名称,即我想要

  • 安装在bin目录中的"版本化"可执行文件,即EXE1_1.0.0
  • 创建一个符号链接到"版本化"的可执行文件,即创建EXE1指向的符号链接EXE1_1.0.0

有人可以建议我怎么做吗?

第二个问题是:如何安装配置文件/ etc/MYPROJECT /目录?我需要将什么目的用于配置文件,比如我bin用于可执行文件和lib库?使用绝对路径就像/etccmake可接受的做法一样?

Laz*_*abs 3

我随后在 cmake 邮件列表上提出了这个问题,这是我收到的回复:

答案的有效性取决于您使用的 CMake 版本以及您想要支持的平台集。

符号链接不太便携

a) 创建可能无法[当前]可移植地完成,但如果您的目标是 Unix,则可以使用 cmake -E create_symlink 来创建一个。

b) 根据您使用的 CPack 生成器和 CMake/CPack 版本
符号链接可能嵌入或不嵌入到包中。

即 CPack 2.8.7 之前版本无法创建包含符号链接的 ZIP 存档,CPack 2.8.8 现在可以做到这一点。

然后您可以在安装时使用 install(SCRIPT ... 或 install(CODE ...) 来执行此操作。

如果您使用 RPM,另一个选择是使用特定于包的安装后脚本。cpack --help-variable CPACK_RPM_POST_INSTALL_SCRIPT_FILE

当然,最后一个解决方案仅适用于 CPack RPM。

对于第二个问题

您可以使用绝对目标路径,它们应该可以由 CPack DEB 和 RPM 处理得很好,我不知道其他的。

如果您的软件应安装在 Windows 上,则该软件将无法与存档生成器(ZIP、TGZ 等)和/或 NSIS 一起使用。

也许你可以做类似的事情:

if(UNIX AND NOT APPLE) set(CONFDEST "/etc/${CMAKE_PROJECT_NAME}") else() set(CONFDEST "etc") endif()

安装(FILES yourconffile DESTINATION ${CONFDEST})