我想使用模式规则来编译依赖于其他类的类。对于每个类,我定义它依赖的类和头文件。在编译一个特定的类时,我想将每个类的每个头文件添加到这样的先决条件中:
# Class 1
C1 = C1
C1_H = C1.hpp
C1_T =
C1_O = C1.o
# Class 2, depending on class 1
C2 = C2 $(C1)
C2_H = C2.hpp
C2_T =
C2_O = C2.o
.SECONDEXPANSION:
# pattern rule. Want to read the C%_H variable of every class this depends on
C%.o : C%.hpp C%.cpp $(foreach var,$$(C%),$($(var)_H))
$(CC) -o $@ -c $<
foreach函数在这里不起作用,因为函数扩展后会出现'%'的扩展。还有办法还是这样吗?
提前谢谢
答案 0 :(得分:2)
1)这是一种方法来做你想要的(或多或少):
C1_HEADERS = C1.hpp
C1.o: $(C1_HEADERS)
C2_HEADERS = C2.hpp $(C1_HEADERS)
C2.o: $(C2_HEADERS)
# and so on
有可能用函数调用或其他东西替换那些第二行(Cn.o: $(Cn_HEADERS)
),但我真的不认为这是值得的。
2)这是你的计划过度杀伤的一种方式:
// C1.hpp
#include "A.hpp"
...
// C1.cpp
#include "C1.hpp"
#include "B.cpp"
...
所以C1.o
取决于B.hpp
,但C2.o
不会。{/ p>
3)这是处理这些依赖关系的更好方法:Advanced Auti-Dependency Generation。