【发布时间】:2009-06-19 00:11:25
【问题描述】:
我一直无法让我的 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 编译。
【问题讨论】: