Я работаю над своим первым проектом 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 поддерживает сокращение для создания объектных файлов. Если кто-то покажет пример этого, я был бы признателен.
Далее, есть ли способ избежать перечисления каждого включенного заголовка в качестве зависимости? Я хочу убедиться, что если я изменю зависимость, изменения все еще совместимы. Перечисление включенных заголовков утомительно и легко испортить.
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
файлы
Да, make поддерживает сокращение для создания объектных файлов. Это называется правилами. И да, есть способ избежать перечисления каждого включенного заголовка в качестве зависимости. В g ++ / gcc есть опция -MM, которая генерирует полный список зависимостей.
К сожалению, здесь нет простого объяснения того, как это сделать, которое я мог бы поместить здесь. Вы должны читать документы и играть с утилитой make. Мне эта книга показалась мне очень полезной: «Управление проектами с помощью GNU Make». На сайте GNU есть документация, но мне было труднее его читать. www.gnu.org/software/make/manual/make.html