Разделение объектов и источника с помощью make-файла - PullRequest
2 голосов
/ 19 июня 2009

У меня были проблемы с тем, чтобы мои make-файлы работали так, как я хочу. Прежде всего, я бы хотел сказать, что это POSIX make, как в http://www.opengroup.org/onlinepubs/009695399/utilities/make.html Мне нужна моя система сборки для работы как с BSD, так и с GNU (Linux).

То, что я хочу, это make-файл с нулевым обслуживанием. Я хочу, чтобы он просто скомпилировал все файлы .c и .asm в src / и поместил объектные файлы в objs /, а затем связал все в objs / с двоичным файлом.

Я могу многое, но не могу разделить исходный файл и файл obj.

Я в порядке, если для этого требуется немного встроенных сценариев оболочки (с использованием POSIX, определенных / bin / sh), но я просто не могу заставить работать зависимости. Я хочу, чтобы он создавал объектный файл, только если исходный файл более новый.

Мой самый близкий это:

${C_OBJS}: ${HDRS} ${*:objs/%=src/%}.c
    ${CC} ${CFLAGS} -c ${*:objs/%=src/%}.c -o $*.o

В этом проблема того, что я все еще должен указывать C_OBJS = objs / foo.o и тому подобное, а также он просто не POSIX и поэтому компилируется с make BSD, но не с GNU make.

Ответы [ 2 ]

2 голосов
/ 19 июня 2009

Версия make для POSIX явно не поддерживает имена файлов с косой чертой в них, а также не предусматривает отделение исходных файлов в другом каталоге от объектных файлов. И, как отмечает @caskey, он не поддерживает никакие обозначения, использующие символы %, хотя отмечает, что такие правила существуют, и рекомендует зарезервировать их для использования в качестве метасимволов.

Следовательно, вы, вероятно, не можете делать то, что хотите, со стандартным POSIX make.

На практике вы часто можете делать то, что вы ищете, с конкретными реализациями make, но полученный makefile имеет ограниченную переносимость.

Подумайте об использовании каких-либо систем генерации make-файлов - cmake или автоинструментов (autoconf, libtool, automake и т. Д.). Или одна из многих переработок основных понятий make:

  • SCons
  • муравей
  • торт
  • готовить
  • бюстгальтеры
  • ... и дюжина, которую я забыл или не слышал о ...
1 голос
/ 19 июня 2009

POSIX make не поддерживает конструкции типа?

  objs/%.o : src/%.c
    ${CC} ${CFLAGS} -c $< -o $@

Забыл вопросительный знак в конце, надеюсь, это сделает мой комментарий более ясным.

...