CMake用add_custom_target

问题描述

我正在尝试向我的cmake设置添加自定义目标。因为我想用一组参数执行特定的工具,所以这是必需的。可执行文件本身是预构建的,位于我要构建的存储库中(因此,在存储库中有显式的.exe,不会构建)。

我使用了以下cmake命令:

add_custom_target(some_target ALL DEPENDS ${INPUT_FILES} COMMAND <path_to_repository>/<path_within_repository>/my_tool.exe "arguments")

这是一个问题的症结所在:

<path_to_repository>/<path_within_repository>/my_tool.exe

可执行文件的路径被构建为使用一些动态和静态部分的绝对路径(@H_404_15@显然是动态的,并在“ add_custom_target”之前扣除。是静态的,在cmake中进行硬编码。)>

例如,我们有:

C:/user/repos/source/MY_REPO/PROJECT/Sources/SpecialTool/bin/my_tool.exe
<path_to_repo ------------->/<path_within_repository ------->

问题是当我开始执行cmake并进行构建时。从日志中,我可以看到由于某种原因,@H_404_15@的部分总是被替换为“ ../../”(尽管我使用message()打印完整的@H_404_15@ / 和它是正确的)。因此,在执行命令时,我会在make日志中看到以下内容

../../Sources/SpecialTool/bin/my_tool.exe

失败,并显示一条非常简单的错误消息

'..' is not recognized as an internal or external command,

可操作的程序或批处理文件

,因为它试图在Windows上构建它,所以显然用“ /”而不是“ \”的相对路径不起作用(Source/SpecialTool/bin/my_tool.exe可以用,但是显然您不能在Windows上使用斜杠和相对路径)。

所以有两个问题:

  1. 为什么绝对路径的一部分被相对路径代替(所以,用<..> make)?
  2. 如何强制使用“ \”代替“ /”(以便相对的..\..\Sources\...\my_tool.exe路径起作用)?

我已经尝试将反斜杠放在路径中(因此 C:\\user\\repos\\source\\MY_REPO\\PROJECT\\Sources\\SpecialTool\\bin\\my_tool.exe),使用引号等,似乎没有任何效果。我还尝试过使用add_custom_command,然后在add_custom_target中使用它,但这给了我与在add_custom_target中直接调用命令完全相同的行为。

唯一不会发生此问题的实例是当我手动将“ my_tool.exe”放在文件夹层次结构中存储库本身上方的某个位置(因此C:/user/repos/source/my_tool.exeC:/my_tool.exe时,路径自然不会包含构建的存储库本身的完整路径)。在为该项目编写cmake时,我也无法实际使用它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)