2016-11-12 8 views
0

Я пытаюсь написать make-файл для всех моих ppp-проектов. После поиска из Интернета, я сделать Makefile, как показано ниже:
makefile: как указать файлы заголовков

g++11=g++ -std=c++11 -stdlib=libc++ 

CPPFILES=$(wildcard *.cpp) 
OBJFILES=$(CPPFILES:.cpp=.o) 


res.out: $(OBJFILES) 
    $(g++11) -lncurses -o [email protected] $^ -g 

#obj/%.o: %.cpp 
%.o: %.cpp 
    $(g++11) -c -o [email protected] $< -g 


clean: 
    rm *.o *.out 

Я пытался использовать этот файл для компиляции моих CPP проектов, и она работала хорошо.

Однако, когда я вношу некоторые изменения в файлы заголовков, он больше не работает, потому что этот make-файл не может обнаружить модификацию в файлах заголовков.

Есть ли простой способ указать заголовочные файлы в make-файле?
Ofc Я не хочу указывать их по одному.

+3

Посмотрите "сделать автогенерацией зависимость" – Peter

+0

Вы можете добавьте файлы заголовков в качестве зависимости для правила '.o". –

+0

@Thomas Matthews - кроме того, чтобы заставить OP «указывать их один за другим», что он не хочет делать, что также заставляет полностью перестраивать всякий раз, когда изменяется любой файл заголовка, включая единицы компиляции, которые не зависят от измененного заголовок. Генерация автоматической зависимости использует компилятор (фактически препроцессор) для создания списка зависимостей на основе '# include' в исходных файлах, поэтому изменение заголовка приводит к перекомпиляции объектов, зависящих от него. – Peter

ответ

0

Прежде всего, вы должны понимать концепцию make.

Make не только для компиляции C++, но и универсального инструмента, в котором продукт (файл) создается из других файлов. Когда вы выпускаете , сделайте, он проверяет, должен ли верхний продукт быть перестроен на основе дат изменения файлов зависимостей. Если требуется перестроить, сначала проверяются все зависимости, следует ли их перестраивать ... и так далее. Эти кирпичи называются правилами.

Это правило:

target: dependency1 dependency2 ... 
    command1 to produce targets 
    command2 

В случае проекта CPP:

myapp: myapp.cpp myapp.hpp 
    g++ myapp.cpp -o myapp 

Подробнее: http://www.cs.cmu.edu/~gkesden/412-18/fall01/projects/proj1/make/makeintro.html

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