我有一个编译规则如下,
$(compiled_objs) : $(obj_dir)/%.o: $(src_base)/%.cpp
它从src_base中的特定.cpp文件创建.o dso对象,并且工作正常。
问题: 我的问题是,在gnu Makefiles中有一种方法可以对处理%.cpp文件的顺序进行排序。例如,在每个src_base中,我有一个名为xxxLast.cpp的文件,我想在$ src_dir目录中的所有其他.cpp文件已经被处理之后为* Last.cpp创建对象。
用例: 我的用例并不常见,但我想嵌入xxxLast.cpp文件中所有其他.o对象的md5sum,我可以在其规则中添加其他处理。
我在makefile上做了很多工作。将非常感谢帮助,并提前感谢。
答案 0 :(得分:1)
在makefile中的其他位置,您将拥有一个取决于$(compiled_objs)
的目标:
all_objects: $(compiled_objs)
Make将按照列出的顺序构建任何目标的先决条件。因此,如果您希望最后构建一个特定对象,那么您只需将它放在compiled_objs
宏的末尾。
请注意,在并行构建期间make仍然会按照相同的顺序运行命令,但是由于并行化效果,它们实际上可能以不同的顺序运行,或者至少你不知道最后一个将是在所有之前的完成之后开始。
根据您的情况,我真的不建议只是在最后粘贴最后一个对象并希望。您应该使用make规则明确定义此关系,所以:
all_objects: xxxLast.o
xxxLast.o: $(compiled_objs-but-not-xxxLast.o)
...generate md5sums for $^...
xxxLast.o $(compiled_objs-but-not-xxxLast.o): $(obj_dir)/%.o: $(src_base)/%.cpp