我一直无法让我的 makefile 以我想要的方式工作。首先,我想说这是 POSIX make,如http://www.opengroup.org/onlinepubs/009695399/utilities/make.html我需要我的构建系统同时使用 BSD 和 GNUs(Linux) .
我想要的是一个零维护的makefile。我希望它只编译 src/ 中的所有 .c 和 .asm 文件,并将目标文件放在 objs/ 中,然后将 objs/ 中的所有内容链接到二进制文件。
我可以做很多事情,但我无法将源文件和 obj 文件分开。
如果这需要一点内置的 shell 脚本(使用 POSIX 定义的 /bin/sh),我可以,但我不能让依赖项正常工作。如果源文件较新,我希望它只构建目标文件。
我最接近的是:
${C_OBJS}: ${HDRS} ${*:objs/%=src/%}.c ${CC} ${CFLAGS} -c ${*:objs/%=src/%}.c -o $*.o
这有一个问题,我仍然必须指定 C_OBJS=objs/foo.o 等等,而且它几乎不是 POSIX,因此用 BSD make 而不是 GNU make 编译。