2009-06-19 3 views
2

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

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

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

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

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

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

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

ответ

1

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

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

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

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

  • SCons
  • муравей
  • торт
  • повар
  • бюстгальтеры
  • ... и дюжину я забыл или не слышал об ...
0

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

objs/%.o : src/%.c 
    ${CC} ${CFLAGS} -c $< -o [email protected] 

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

+0

Является ли это саркастическим? Думаю, я могу просто поддержать BSD и GNU make, что, похоже, работает на GNU make, и я думаю, что «близко» к работе над BSD make .. – Earlz

+0

Хорошо, подождите, на самом деле это не работает вообще для BSD – Earlz

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