cmake:add_custom_command / add_custom_target忽略依赖项

时间:2014-08-04 21:20:15

标签: cmake

这可能是非常基本的,但它让我疯了。让我们说我有一个将源代码转换为对象的编译器:

compiler source object

我想添加cmake规则,因此只有在source发生更改时才会调用此规则。我尝试的所有排列要么从不调用它,要么总是这样做。

我暂时搁置那些什么也不做的东西。这总是调用它,无论source是否已更改:

add_custom_command(OUTPUT object
                   COMMAND compiler source object
                   DEPENDS source)
add_custom_target(my_target ALL DEPENDS object)

我知道add_custom_target会生成一个始终过时的目标,因此始终会构建my_target。但当它链接到另一条规则时,它从不考虑source是否已过时;它始终建立。我希望DEPENDS条款做正确的事。

我误解了什么?我使用的是旧版本(2.6);是否有可能出现错误?

1 个答案:

答案 0 :(得分:0)

我想我明白了。这是我的编译器的一个怪癖,它希望始终将object放在同一个目录source中。上面的示例适用于源内构建,但对于源外构建,它在错误的位置寻找object并且它永远不会存在。我认为,锤击编译器将object置于显式位置将解决这个问题。