我有一些文件列表需要我的Makefile编译,每种源语言都有一个列表:
CFILES= Src/Application/main.c Src/Core/data.c Lib/routines.c
ASFILES= Src/Application/startup.s Lib/sqrt.s
我希望所有的输出都在一个目录中:
OBJDIR= output
我该如何做到与以下代码等效:
output/main.o : Src/Application/main.c
cc -c -o output/main.o Src/Application/main.c
output/data.o : Src/Core/data.c
cc -c -o output/data.o Src/Core/data.c
output/routines.o : Lib/routines.c
cc -c -o output/routines.o Lib/routines.c
output/startup.o : Src/Application/startup.s
as -o output/startup.o Src/Application/startup.s
output/sqrt.o : Lib/sqrt.s
as -o output/sqrt.o Lib/sqrt.s
对于列表中的每个文件,使用相同的配方。
输入文件位于各种不同的目录中,仅列出它们的文件名并使用搜索路径查找它们是不可接受的,必须使用它们的显式路径。
输出文件名是源文件名的基本名称,扩展名更改为o。不同源语言的列表之间没有重复的基本名称。
我不想列出对象文件,应该从源列表中派生出来。
我正在使用gnu make,但如果有便携式解决方案则额外加分。