我正在使用cmake和cpack来构建我的项目并构建包。我在项目中创建了一些可执行文件,我们称之为EXE1
和EXE2
。
在创建这些可执行文件的不同版本时,我想命名以反映可执行文件的版本(假设为EXE1_1.0.0
)。我可以通过set_target_properties
更改目标输出的名称。
但是,现在在进行install
时,我想创建一个符号链接到这个可执行文件的版本名称,即我想拥有
bin
目录中的“版本化”可执行文件,即EXE1_1.0.0
EXE1
,其指向EXE1_1.0.0
有人可以建议我怎么做吗?
第二个问题是:
如何安装配置文件/ etc / MYPROJECT /目录?我需要将什么目的用于配置文件,例如我对可执行文件使用bin
而对库使用lib
?使用像/etc
这样的绝对路径是cmake可接受的做法吗?
答案 0 :(得分:3)
我随后在cmake邮件列表上问了这个问题,这是我收到的回复:
答案的有效性取决于您使用的CMake版本 以及您想要支持的平台集。
符号链接不是那么便携
a)创作可能不是[目前]可移植,但如果你是 以Unix为目标,您可以使用cmake -E create_symlink创建一个。
b)取决于您使用的CPack发生器和CMake / CPack版本
符号链接可以嵌入包中,也可以不包含在内。即。 CPack pre 2.8.7无法创建包含的ZIP存档 符号链接CPack 2.8.8现在可以做到。
然后你可以使用安装(SCRIPT ...或安装(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)设置(CONFDEST“/ etc / $ {CMAKE_PROJECT_NAME}”) else()设置(CONFDEST“etc”)endif()
安装(FILES yourconffile DESTINATION $ {CONFDEST})