动态生成的依赖项

时间:2014-09-09 14:46:55

标签: cmake

我正在尝试生成依赖于一组文件的文件 在不同的调用中进行更改。

为了更好地理解它,让我们向您展示代码:

cmake_minimum_required(VERSION 2.8)

project(demo-one C)

add_custom_command(
    OUTPUT
        "${CMAKE_BINARY_DIR}/generated.c"
    COMMAND
        generate -o "${CMAKE_BINARY_DIR}/generated.c"
    DEPENDS
        "$(shell generate-dependencies-list)"
    COMMENT
        "Generating generated.c"
)

add_executable(main main.c "${CMAKE_BINARY_DIR}/generated.c")

所以,我想用generated.c生成文件generate 命令,这些文件需要在文件时重新生成 由generated-dependencies-list命令更改指定。你可以 注意,generated-dependencies-list可以生成不同的一组 文件在整个调用过程中都是不可行的 generated-dependencies-list在配置时的结果 将结果传递给add_custom_command

实际上上面的代码有点起作用,但它看起来像是一个黑客 只适用于Makefile后端,make规则也看起来不行 正如我所期待的那样,毕竟,它是一个黑客攻击:

generated.c: ../$(shell\ generate-dependencies-list)

基本上,我希望这个规则或其他东西得到相同的结果:

generated.c: $(shell generate-dependencies-list)

CMake有任何功能可以达到这个目的吗?

1 个答案:

答案 0 :(得分:1)

  

当generated-dependencies-list命令指定的文件发生更改时

如果命令generated-dependencies-list的输出仅依赖于此脚本和脚本的参数,那么您只需将此脚本添加到DEPENDS子选项:

add_custom_command(
    OUTPUT
        "${CMAKE_BINARY_DIR}/generated.c"
    COMMAND
        "${CMAKE_CURRENT_LIST_DIR}/generate-dependencies-list"
    COMMAND
        generate -o "${CMAKE_BINARY_DIR}/generated.c"
    DEPENDS
        "${CMAKE_CURRENT_LIST_DIR}/generate-dependencies-list"
    COMMENT
        "Generating generated.c"
)