Использование шаблона шаблонного правила в функции с GNU make - PullRequest
0 голосов
/ 16 февраля 2011

Я хотел бы использовать шаблонное правило для компиляции классов, которые зависят от других классов. Для каждого класса я определяю классы, от которых он зависит, и файл заголовка. При компиляции специального класса я хотел бы добавить каждый заголовочный файл каждого класса к следующим условиям:

# 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 Ответ

2 голосов
/ 17 февраля 2011

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 .

...