相关疑难解决方法(0)

设置和使用变量的CMake语法是什么?

我问这个是下次我使用CMake的时候提醒自己的.它永远不会坚持,谷歌的结果也不是很好.

在CMake中设置和使用变量的语法是什么?

cmake

143
推荐指数
3
解决办法
11万
查看次数

add_custom_command未生成目标

也许这是不可能的,我误读了cmake 3.2文档,但我创建一个自定义命令会在Makefile中创建一个自定义"目标",这样我就可以通过调用输出文件的名称来构建目标.CMake文档说:

在makefile术语中,这将以下列形式创建一个新目标:

 OUTPUT: MAIN_DEPENDENCY DEPENDS
    COMMAND
Run Code Online (Sandbox Code Playgroud)

所以我想我可以跑了make OUTPUT.也许文档将CMake目标与Makefile目标混淆了?

例如,

 add_custom_command(OUTPUT foo_out
    COMMAND post_process foo_in > foo_out
    DEPENDS foo_in
 )
Run Code Online (Sandbox Code Playgroud)

我想要做

 make foo_out
Run Code Online (Sandbox Code Playgroud)

它会使foo_out.但是,如果我这样做,我明白了

make: **** No rule to make target `foo_out`. Stop.
Run Code Online (Sandbox Code Playgroud)

果然,cmake二进制输出目录中的任何文件中都不存在"foo_out"这个词.如果我把它改成这个

add_custom_target(bar DEPENDS foo_out)
add_custom_command(OUTPUT foo_out COMMAND post_process foo_in > foo_out)
Run Code Online (Sandbox Code Playgroud)

然后我就能做到

make bar
Run Code Online (Sandbox Code Playgroud)

我能做到

make foo_in
Run Code Online (Sandbox Code Playgroud)

但我还是做不到

make foo_out
Run Code Online (Sandbox Code Playgroud)

问题make bar是它不直观,因为实际的文件输出foo_out不是bar.

我该怎么做呢?

在我的例子中,我需要对标准可执行目标运行一个特殊的处理步骤,该目标将可选资源插入到ELF文件中.我希望能够将两个可执行文件作为Makefile目标,因此我可以构建裸ELF可执行文件以及注入资源的ELF可执行文件.

如果我正在编写自定义Makefile,这很简单!

foo_in: foo.c
    $(CC) $< -o $@

foo_out: foo_in
    post_process $< …
Run Code Online (Sandbox Code Playgroud)

cmake add-custom-command

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

cmake ×2

add-custom-command ×1