Управление сложностью зависимостей в файлах Make

Я работаю над своим первым проектом C ++ с открытым исходным кодом: https://github.com/jehugaleahsa/spider-cpp.

Я управляю своим собственным Makefile, и у меня есть вопрос «передового опыта» относительно того, как управлять зависимостями. Прямо сейчас я делаю каждый файл .o зависимым от каждого из включенных заголовочных файлов в файле .cpp. Так:

code.o: code.cpp code.hpp dep1.hpp de2.hpp
g++ -c code.cpp

Прежде всего, я уверен, что Make поддерживает сокращение для создания объектных файлов. Если кто-то покажет пример этого, я был бы признателен.

Далее, есть ли способ избежать перечисления каждого включенного заголовка в качестве зависимости? Я хочу убедиться, что если я изменю зависимость, изменения все еще совместимы. Перечисление включенных заголовков утомительно и легко испортить.

1

Решение

OP:

Прежде всего, я уверен, что Make поддерживает сокращение для создания объектных файлов. Если кто-то покажет пример этого, я был бы признателен.

От Вот:

OBJS := foo.o bar.o

#Your program should have the objects as dependencies, and link them
proggie: $(OBJS)
gcc $(OBJS) -o proggie# compile
%.o: %.c
gcc -c $(CFLAGS) $*.c -o $*.o

OP:

Далее, есть ли способ избежать перечисления каждого включенного заголовка в качестве зависимости

Опустить вниз на той же странице, увидеть эти строки:

# pull in dependency info for *existing* .o files
-include $(OBJS:.o=.d)# compile and generate dependency info
%.o: %.c
gcc -c $(CFLAGS) $*.c -o $*.o
gcc -MM $(CFLAGS) $*.c > $*.d

По сути, для получения списка заголовочных файлов используется опция -cc для gcc, и теперь мы можем зависеть от них. Таким образом, мы выводим файл со списком таких заголовочных файлов в файл .d, а затем в следующий раз добавляем список файлов в качестве зависимости, что является -include команда делает. «-«избегает ошибки, если файлы зависимостей .d еще не существуют.

Обратите внимание, что вы должны изменить вышеуказанное, чтобы учесть .cpp файлы

2

Другие решения

Да, make поддерживает сокращение для создания объектных файлов. Это называется правилами. И да, есть способ избежать перечисления каждого включенного заголовка в качестве зависимости. В g ++ / gcc есть опция -MM, которая генерирует полный список зависимостей.

К сожалению, здесь нет простого объяснения того, как это сделать, которое я мог бы поместить здесь. Вы должны читать документы и играть с утилитой make. Мне эта книга показалась мне очень полезной: «Управление проектами с помощью GNU Make». На сайте GNU есть документация, но мне было труднее его читать. www.gnu.org/software/make/manual/make.html

0

По вопросам рекламы [email protected]