gpt4 book ai didi

c++ - 在带有 GNU make 的函数中使用模式规则的模式

转载 作者:行者123 更新时间:2023-11-28 03:52:22 25 4
gpt4 key购买 nike

我想使用模式规则来编译依赖于其他类的类。对于每个类,我都定义了它所依赖的类和头文件。编译特定类时,我想将每个类的每个头文件添加到这样的先决条件中:

# 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 函数在这里不起作用,因为 '%' 的扩展发生在函数扩展之后。有没有办法仍然这样做?

提前致谢

最佳答案

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 不依赖。

3) 这是处理这些依赖关系的更好方法:Advanced Auti-Dependency Generation .

关于c++ - 在带有 GNU make 的函数中使用模式规则的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com