C Makefile - 如何避免重复提及文件名

问题描述 投票:0回答:1

对于我的一门课的作业,我们需要为我们的 C 程序创建一个 makefile,它比

compile: gcc whatever
更复杂。我相信我们应该做这样的事情:

outputname: file1.o file2.o file3.o file4.o
    gcc -o outputname file1.o file2.o file3.o file4.o

clean:
    rm -f outputname file1.o file2.o file3.o file4.o

file1.o: file1.c
    gcc -c file1.c

file2.o: file2.c
    gcc -c file2.c

file3.o: file3.c
    gcc -c file3.c

file4.o: file4.c
    gcc -c file4.c

但是必须多次列出相同的文件名让我很恼火。如果我需要更新名称,我需要确保替换文件中的每个实例。或者,如果我添加一个文件,我必须添加与文件中已有的其他四行几乎相同的新行。我已经设法非常接近上述 makefile 的功能:

files := file1.o file2.o file3.o file4.o
output := outputname

$(output): $(files)
    gcc -o $(output) $(files)

clean: 
    rm -f $(output) $(files)

$(files): $(files:.o=.c)
    gcc -c $(@:.o=.c)

我能说的唯一区别是,与第一个示例不同,如果其中任何一个 c 文件已更新,这将重新编译所有 c 文件,从而消除了 makefile 的优点之一。我还能做些什么来消除冗余但保留所有功能吗?

c makefile
1个回答
0
投票

大多数

make
实用程序已经具有内置的隐式依赖项,例如从 .c 文件生成 .o 文件。因此,由于您没有在编译步骤中指定任何特殊内容,因此您可以将文件压缩为以下内容:

OBJS = file1.o file2.o file3.o file4.o

outputname: $(OBJS)
    gcc -o outputname $(OBJS)

...它可以自己处理剩下的事情(哦——除了你可能仍然想要你的

clean:
规则)。

© www.soinside.com 2019 - 2024. All rights reserved.