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


person Travis Parks    schedule 28.09.2012    source источник
comment
Вместо этого вы можете изучить CMake; у него более простой синтаксис, чем у make (ну, во всяком случае, другой), и он переносим; он генерирует make-файлы или файлы проектов для наиболее распространенных IDE для платформы, на которой он работает.   -  person Pete Becker    schedule 28.09.2012
comment
Или премейк. CMake создает make-файлы, но эти make-файлы по-прежнему зависят от CMake. premake может генерировать make-файлы, которые можно распространять как make-файлы. В любом случае make-файлы могут стать громоздкими и специфичными для платформы/IDE/компилятора (если только вы не сделаете их универсальными, что еще более безумно громоздко).   -  person Realz Slaw    schedule 28.09.2012
comment
Взгляните на руководство GNU make, оно достаточно подробное. Не ведитесь на бесчисленное множество замен, на этот раз все сделано правильно, ни одно из них не получило существенной поддержки. Достаточно хорошо, даже kludgy, ну, достаточно хорошо.   -  person vonbrand    schedule 21.01.2013


Ответы (2)


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

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

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

person Realz Slaw    schedule 28.09.2012

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

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

person shargors    schedule 28.09.2012