这可能是非常基本的,但它让我疯了。让我们说我有一个将源代码转换为对象的编译器:
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);是否有可能出现错误?
答案 0 :(得分:0)
我想我明白了。这是我的编译器的一个怪癖,它希望始终将object
放在同一个目录source
中。上面的示例适用于源内构建,但对于源外构建,它在错误的位置寻找object
并且它永远不会存在。我认为,锤击编译器将object
置于显式位置将解决这个问题。