【发布时间】:2018-07-05 16:01:15
【问题描述】:
在这样的情况下:
sample.o: sample.hpp
%.o: %.cpp
$(CXX) -o $@ -c $<
sample.o: utility.hpp
编译 sample.o 时,第一个先决条件是什么($< 的值)? sample.hpp? sample.cpp? ...utility.hpp? sample.hpp 是 make 找到的第一个先决条件。 sample.cpp 是包含配方的规则的第一个必要条件,这是最有意义的。 utility.hpp 被用作第一个先决条件是没有意义的,但我把它放在完整性上。
如果?
sample.o: sample.hpp utility.hpp
# implicit rule %.o: %.cpp
如果?
%.o: %.cpp # Removal of implicit rule/recipe.
sample.o: sample.hpp
%.o: %.cpp %.d
$(CXX) $(DEPFLAGS) -o $@ -c $<
这里的第一个先决条件可以是第一行中的sample.cpp,或者sample.hpp,因为%.o: %.cpp 被%.o: %.cpp %.d 覆盖并且sample.hpp 是新的第一个先决条件;或再次sample.cpp,因为它是包含配方的规则的第一个先决条件。
如果?
sample.o: sample.hpp
%.o: %.cpp
sample.o: utility.hpp
%.o: %.cpp %.d
$(CXX) $(DEPFLAGS) -o $@ -c $<
同样的参数,第四行可能是sample.hpp 或sample.cpp。
简而言之,GNU Make 用来填充$< 的标准或算法是什么?
【问题讨论】:
标签: variables makefile prerequisites