2013-02-09 73 views
0

說我在我的Makefile以下規則:製作:編譯規則.c文件

foo: foo1.c foo2.c head1.h head2.h 
    gcc -o [email protected] foo1.c foo2.c 

正如你所看到的,在這種情況下 - 因爲在大多數情況下─的.c文件中的規則對應到您傳遞給gcc的.c文件。我的問題是,是否有一個變量可以傳遞給一個Makefile來評估「規則中的所有.c文件」?

就個人而言,我使用以下命令:

CFILES=$(filter %.c,$^)               

foo: foo1.c foo2.c head1.h head2.h 
    gcc -o [email protected] $(CFILES) 

,但我不知道這是正確的方式...

回答

0

我猜你的過濾器是好的,但我寧願定義單獨的.c.h文件列表,並使用這些名單酌情:

CFILES=foo1.c foo2.c 
HFILES=head1.h head2.h 

foo: $(CFILES) $(HFILES) 
     gcc -o [email protected] $(CFILES) 

如果你不混合.c和首先是,之後不需要將它們分開。

+0

這是一個選項,但考慮一個Makefile,其中有許多這些行。你會使用CFILES1,2,3等,它會變得更加混亂。我在看'make'是否有本地的方式來做到這一點。在我看來,這是'make'擁有的一個非常合理的特性。 – 2013-02-09 13:43:50

+0

make需要爲每個隱式規則配置一組這樣的過濾器,甚至開始這個工作(並且由於它無法在這種情況下自動應用這些過濾器,無論如何,我不知道這會甚至會有意義打擾)。 – 2013-02-10 13:31:13