spl*_*cer 2 sqlite dependencies makefile gnu-make
这是我想要makefile做的一些伪代码:
if (A doesn't exist) or (B is newer than A):
rm -rf A
create an empty A
parallel_for X in (a large set of files):
if (X is newer than A):
update A using the contents of X
Run Code Online (Sandbox Code Playgroud)
在上面的伪代码中,A是一个SQLite数据库,B是一个C头文件,"大文件集"中的每个文件都是一个C源文件.
基本上,如果我只修改其中一个C源文件,我只希望快速更新数据库,而不是从头开始重建整个数据库.
这种类型的问题是否可以直接在GNU make中解决,还是我不得不求助于使用脚本?
提前致谢!
这样的事情应该有效:
A:: B
-rm -f $@
create_A $@
A:: $(all_X)
update_A_from_Xes $@ $?
Run Code Online (Sandbox Code Playgroud)
$?扩展到$(all_X)比A更新的子集(有关更多详细信息,请参阅GNU Make手册的" 自动变量"部分.)因此,必须更新其关于所有后续参数的第一个参数;它只会被调用一次.update_A_from_Xes
该双冒号告诉作出这样的命令来运行更新是不同的,当它是过时的,相对于B时相比,这是过时的关于XES.我不确定这两组命令是否会在两者都过时的情况下运行; 如果它们都运行,A:: B规则将首先运行.