2016-04-09 23 views
3

GNU makefile'yi öğreniyorum. Bu sayfa boyunca geldi:Makefile'de hedef ".cpp.o:" ne demektir?

CC=g++ 
CFLAGS=-c -Wall 
LDFLAGS= 
SOURCES=main.cpp hello.cpp factorial.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=hello 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

.cpp.o: 
    $(CC) $(CFLAGS) $< -o [email protected] 

kimse OBJE değişkeni var ve (aynı zamanda o $<) Ne hedef .cpp.o: vasıta bize açıklayabilir misiniz: Bu makalenin sonunda http://mrbook.org/blog/tutorials/make/

, bunu buldum?

ben gibi bir şey kullandığımda da bulundu:

SRC = $(wildcard $(SRC_DIR)*.c) 
SRC_OBJS = $(patsubst %.c, %.o, $(SRC)) 

ve "$ (SRC_OBJS)" hedef olarak, her gerekli nesne için tüm nesneleri derlemek olacaktır kullanın. Bu birincisi için olmaz. Fark ne?

cevap

4

Bu keyfi bir file için file.o içine file.cpp açmak için nasıl yapmak anlatan bir eki kural bu.

$<, sonek kuralında file.cpp kaynak dosyasına başvuran otomatik bir değişkendir.

[email protected], file.o hedef dosyasına başvuran bir otomatik değişkendir.

+0

Bana adını verdiğiniz için, "sonek kuralı" nı aradım ve bunun GNU belgesinde iyi açıklandığını gördüm. Bu benim problemimi çözdü. –

+0

@MingchenZhang Harika! Stackoverflow'taki bir sonraki adım, en yararlı bulduğunuz cevabı kabul etmemek/kabul etmektir (bazen bunu yapabilmeniz için minimum süre ya da gereken minimum itibar). – Jens

İlgili konular