5

我正在使用 cmake 和 cpack 来构建我的项目和构建包。我在我的项目中创建了一些可执行文件,我们称它们EXE1EXE2.

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

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

  • 安装在bin目录中的“版本化”可执行文件,即EXE1_1.0.0
  • 创建指向“版本化”可执行文件的符号链接,即 create symlink EXE1,它指向EXE1_1.0.0

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

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

4

1 回答 1

3

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

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

符号链接不是那么便携

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

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

即 CPack pre 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()

install(FILES yourconffile DESTINATION ${CONFDEST})

于 2012-04-24T11:44:07.270 回答