【发布时间】:2021-08-23 21:11:32
【问题描述】:
我有一个具有以下文件夹结构的项目:
src/
|
|- foo/config.ini
|- bar/config.ini
|- tool/
| | - myscript.sh
| | - CMakeLists.txt
|- cpp/
|- main.cpp
|- baz.cpp
|- CMakeLists.txt
基本上,我想
- 有一个自定义目标
make foo-target - 我希望
foo-target依赖于我在cpp/main.cpp中内置的可执行文件 - 我希望
foo-target以某种方式配置myscript.sh-
myscript.sh已配置为知道在哪里可以找到foo/config.ini(类似于拥有 ini 的绝对路径) -
myscript.sh也被配置为知道在哪里可以找到内置在cpp/main.cpp中的可执行文件
-
我已经调查过了:
- add_custom_command
- add_custom_target
- configure_file
- 将变量导出到环境(通过添加自定义命令)
但我就是不知道怎么做!并且可以使用一些帮助!
也许还有其他 CMake 命令可以提供帮助,或者我正在尝试一些我不应该做的愚蠢的事情,感谢任何帮助!
适用于 CMake 3.4 及以上版本
编辑:
这是myscript.sh的示例
#!/bin/sh
CONFIG_INI=@CONFIG_INI_ABS_PATH@
EXE_PATH=@EXE_ABS_PATH@
echo "Config path is $CONFIG_INI"
echo "Exe path is $EXE_PATH"
至于tools下的CMakeLists.txt
set (CONFIG_INI_ABS_PATH ${PROJECT_SOURCE_DIR}/foo/config.ini)
set (EXE_ABS_PATH ${PROJECT_SOURCE_DIR}/cpp/myExe)
# This works, but how can I make it depend on myExe
# And how can I configure it "on command" (i.e. make foo-target)
configure_file(myscript.sh myscript.sh
USE_SOURCE_PERMISSIONS
@ONLY
)
# Can't figure out how to use this one
add_custom_command(OUTPUT myscript.sh
# COMMAND use sed to modify the bash script? by cahcing all @*@ to what I want?
)
add_custom_target(foo-target
DEPENDS myExe # I know that I need this to make my target depend on "myExe"
)
【问题讨论】:
-
myscript.sh is configured“配置脚本”是什么意思?I just can't figure out how to你能说得更具体点吗?你不知道如何添加自定义目标,或者如何依赖可执行文件,或者如何配置脚本,或者如何获取foo/config.ini的路径,或者如何找到编译生成的可执行文件cpp/main.cpp? -
add_custom_command 应该完成你想要的,这种方法有什么问题?
-
再更新一下问题...这基本上归结为我不知道如何正确使用
add_custom_command,甚至不知道要谷歌什么 -
use sed to modify the bash script?但是为什么要修改呢?为什么不喜欢将路径作为参数传递?脚本有什么作用?您的脚本是否生成一些输出,或者您只是想运行它来打印两行文本? IE。你的脚本是无状态的还是修改了文件?
标签: cmake