我问这个是下次我使用CMake的时候提醒自己的.它永远不会坚持,谷歌的结果也不是很好.
在CMake中设置和使用变量的语法是什么?
也许这是不可能的,我误读了cmake 3.2文档,但我创建一个自定义命令会在Makefile中创建一个自定义"目标",这样我就可以通过调用输出文件的名称来构建目标.CMake文档说:
在makefile术语中,这将以下列形式创建一个新目标:
Run Code Online (Sandbox Code Playgroud)OUTPUT: MAIN_DEPENDENCY DEPENDS COMMAND
所以我想我可以跑了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)