0
我有工作,看起來像這樣一個makefile:的Makefile與通用中間規則
TARGET:=prog
SOURCES:=a.c b.c
CFLAGS:=-Wall -g -O2
OBJECTS:=$(SOURCES:%.c=%.o)
$(TARGET): $(OBJECTS)
gcc -o [email protected] $^
%.o: %.c
gcc $(CFLAGS) -c -o [email protected] $<
clean:
rm -f $(TARGET) $(OBJECTS)
用戶需要改變的唯一變量是目標名稱,並建立它所需的資源。需要生成的對象從源自動確定。我想擴展它以支持多個目標,每個目標都有自己的源代碼列表。儘管如此,我無法獲得正確的語法。這是總體思路:
TARGETS:=prog1 prog2
SOURCES_prog1:=a.c b.c
SOURCES_prog2:=a.c c.c
CFLAGS:=-Wall -g -O2
[email protected]=$([email protected]:%.c=%.o)
$(TARGETS): $([email protected])
gcc -o [email protected] $^
%.o: %.c
gcc $(CFLAGS) -c -o [email protected] $<
clean:
rm -f $(TARGET) $(OBJECTS)
但我不能讓對象列表正確生成。我也不確定如何編寫clean
規則來清除所有對象。這可能嗎?
沒有時間更多的時刻,但像這樣你需要動態地界定目標的/ etc東西寫上去。與['$(eval)'](http://www.gnu.org/software/make/manual/make.html#Eval-Function)和循環(可能[Canned Recipes](http:// www。 gnu.org/software/make/manual/make.html#Canned-Recipes)或者(或可能另外)[Secondary Expansion](http://www.gnu.org/software/make/manual/make.html# Secondary-Expansion)。除非你保存了所有對象/目標的列表(或者可以再次生成),否則'clean'規則將不起作用。 –