我有一个使用CMake生成构建脚本的项目,每个平台都将生成的可执行文件放在不同的位置。我们团队中有一位非程序员,他没有构建工具,我希望能够捆绑运行项目所需的所有文件、脚本和可执行文件,以便他能够运行项目。
为此,我添加了一个自定义目标,它可以获取所有必需的文件并将其压缩。它还生成一个非常简单的脚本(包含在zip文件中),用户只需单击该脚本即可运行脚本,然后启动可执行文件,如下所示:
add_custom_target(runcommand
COMMAND echo '\#!/bin/bash -eu' > run.command &&
echo 'cd `dirname $$0`' >> run.command &&
echo './scripts/prerun_script.sh && ${MY_EXECUTABLE}' >> run.command &&
chmod +x run.command)
这样做的问题是MY_EXECUTABLE是我系统上可执行文件的硬编码路径。我希望它是一个相对路径,这样我就可以得到这个结果zip文件,在任何地方解压缩它,然后从那里运行它。我希望得到MY_EXECUTABLE相对于我的项目根目录的路径,这样这个脚本就可以从任何地方运行。
4条答案
按热度按时间nbnkbykc1#
您可以用途:
具体地说,假设
MY_ROOT
包含根目录(可能有一个合适的预定义CMake变量),这将把rel
设置为MY_EXECUTABLE
的相对路径:mfuanj7w2#
如果要获取相对于项目根目录的路径,可以使用
PROJECT_SOURCE_DIR
CMake变量:请记住,
MY_EXECUTABLE
必须包含文件完整路径eit6fx6z3#
获取当前源目录的相对路径
测试项目:
结果:
5anewei64#
类似这样的方法可以奏效:
基本上,这是从
$MY_EXECUTABLE
中切出基本路径。在这个例子中,我只是设置了MY_EXECUTABLE
作为测试,以给予完整路径。我想这是假设
pwd
是您项目的根目录,否则请参阅Cmake variable文档。(As顺便说一句,这让我怀念起
ksh
的日子。)