У меня были проблемы с тем, чтобы мои 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.