GNake Makefile中只有订单的先决条件是否可用于CMake,如果没有,有哪些替代选项?

时间:2017-12-08 00:45:00

标签: makefile cmake

在GNU make中,如果目标A依赖于两个目标B和C,但使用目标C构建A则需要已经构建目标B(但目标C本身不依赖于B) ,我可以使用仅限订单的先决条件。

CMake还有其他选择吗?我知道CMake只是一个配置工具,所以这个问题可以更好地改写为“我能以某种方式编写CMakeLists.txt,以便生成仅具有订单的先决条件的Makefile吗?”

也欢迎替代解决方案。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用仅订购先决条件的典型情况是确保在某个make规则中使用目录之前准备好目录。通常, cmake 负责处理其控制下的所有目标的目录。但是如果你真的需要一些目录,你可以使用这样的自定义目标命令:

add_custom_target(build-time-make-directory ALL
    COMMAND ${CMAKE_COMMAND} -E make_directory ${directory})

此目标是"没有输出"所以它总会建成,但依赖它的目标不一定会被重建。

这不仅限于mkdir。这是另一个例子:

add_executable(qqexe qq.c)
add_custom_target(_custom_target COMMAND touch pp.c COMMENT pp)
add_dependencies(qqexe _custom_target)

每次运行 make 时, pp.c 的时间戳都会刷新,但 qqexe 将不会重建,除非时间戳为 qq.c 更改。