【发布时间】:2011-02-16 17:31:50
【问题描述】:
我想使用模式规则来编译依赖于其他类的类。对于每个类,我定义了它所依赖的类和头文件。在编译特定类时,我想将每个类的每个头文件添加到先决条件中,如下所示:
# 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 函数在这里不起作用,因为 '%' 的扩展发生在函数扩展之后。有没有办法仍然这样做?
提前谢谢你
【问题讨论】:
-
在 C++ 中,您不编译 类,而是编译 文件。
-
看看 gcc 的 -M 选项,例如见scottmcpeak.com/autodepend/autodepend.html。
-
@sbi, Deve:一种修正阻抗不匹配的方法(“在 C++ 中,你不编译类,你编译 files”)是只有一个类每个文件。这是否是一个好主意取决于您和您的实验(我想它可能会使编译速度变慢?)。但是,它适用于 Java :)
-
@Merlyn:它适用于 Java,因为 Java 只有类。如果每个文件放一个类,你会把
main()放在哪里? -
@sbi:什么,你想运行你的程序吗? :) 你说得对,这个建议不起作用