我想运行一个解析整个源代码树的 cmake 命令,所以我无法在 cmake 的 add_custom_command/add_custom_target 命令中列出所有可能的依赖项。
是否可以告诉 cmake 只是在没有任何条件的情况下运行命令?我尝试了在网上找到的所有解决方案(包括 SO),但他们都认为该命令依赖于几个最新的已知文件。
我找到了一个解决方案,但它不能可靠地工作:
cmake_minimum_required(VERSION 2.6)
project(main)
add_custom_command(
OUTPUT file1
COMMAND echo touching file1
COMMAND touch file1
DEPENDS file2)
add_custom_target(dep ALL DEPENDS file1 file2)
# this command re-touches file2 after dep target is "built"
# and thus forces its rebuild
ADD_CUSTOM_COMMAND(TARGET dep
POST_BUILD
COMMAND echo touching file2
COMMAND touch file2
)
这是输出:
queen3@queen3-home:~/testlib$ make
[100%] Generating file1
touching file1
touching file2
[100%] Built target dep
queen3@queen3-home:~/testlib$ make
[100%] Generating file1
touching file1
touching file2
[100%] Built target dep
queen3@queen3-home:~/testlib$ make
touching file2
[100%] Built target dep
queen3@queen3-home:~/testlib$
如您所见,在第三次运行时它没有生成 file1,即使之前已触及 file2。有时每 2 次运行一次,有时每 3 次,有时每 4 次。它是一个错误吗?是否有另一种方法可以在 cmake 中运行没有任何依赖关系的命令?
奇怪但是如果我添加两个命令来重新触摸file2,即只是复制粘贴构建后的命令,它可以可靠地工作。或者它可能每运行 1000 次就会失败,我还不确定 ;-)