在这种情况下:
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使用什么标准或算法填充$<
?
答案 0 :(得分:0)
信息文件说(我的重点):
$<
第一个必备条件的名称。 目标物是否有配方 从隐式规则来看,这将是 隐式规则。
这证实了您所说的“最有意义”的假设。