2016-04-09 5 views
3

Я изучаю make-файл GNU. Я наткнулся на эту страницу: http://mrbook.org/blog/tutorials/make/Что означает «.cpp.o:» в файле Makefile?

В конце этой статьи, я нашел это:

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] 

Может кто-нибудь объяснить, что в переменной OBJECT и какую цель .cpp.o: средства (а также $< в нем)?

Я также обнаружил, когда я использую что-то вроде:

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

и использовать «$ (SRC_OBJS)» в качестве цели, он будет собирать все объекты для каждого требуемого объекта. Это не происходит для первого. Какая разница?

ответ

4

Это правило по суффикс говоря сделать, как превратить file.cpp в file.o для произвольного file.

$< - это автоматическая переменная, ссылающаяся на исходный файл, file.cpp в случае правила суффикса.

[email protected] - это автоматическая переменная, ссылающаяся на целевой файл, file.o.

+0

Спасибо, что дали мне имя, я искал «правило суффикса» и видел, что это хорошо объяснено в документе GNU. Это решило мою проблему. –

+0

@MingchenZhang Отлично! Следующим шагом в Stackoverflow является поддержка/принятие ответа, который вы считаете наиболее полезным (иногда есть минимальное время, прежде чем вы сможете это сделать, или минимальная репутация). – Jens

Смежные вопросы