我刚开始上大学,目前的家庭作业就是这样:
创建一个名为Makefile的makefile文件,该文件使用目标文件light.o和通过编译源文件sound.c获得的目标文件sound.o。
收到 make 或 make build 命令后,必须生成名为 fight 的可执行文件。同时添加一个名为" optim "的规则生成 O2级优化文件。
同时添加名为" 运行"的规则只有在修改了使用过的文件时才会重新编译整个程序。
还要添加名为 clean 的规则,该规则会删除您创建的文件和创建的可执行文件。我把战斗名称与XX放在一起,因为检查员说名字斗争不能出现在makefile中。
我使用自动变量编写了makefile(它们是任务所需的),当我运行作业检查器时,它说任务不完整,因为每次使用命令make都会重新编译文件。
以下是makefile的内容:
CC= gcc
CFLAGS= -Wall -g
XX= fight
run: sound.o light.o
$(CC) sound.o light.o -o $(XX)
./$(XX)
sound: sound.o
$(CC) sound.o -o sound
sound.o: sound.c
$(CC) $(CFLAGS) -c sound.c
optim: sound.o light.o
$(CC) -O2 sound.o light.o
clean:
rm -f sound sound.o $(XX)
https://i.stack.imgur.com/BE3AW.png
以下是我拥有的文件的图像(主要是由编译sound.c产生的light.o和声音组件。)我把它放在以防万一我可能需要使用更多这些文件并省略它们。 / p>
我想要一些帮助,你认为我应该添加什么,所以只有在修改文件时才重新编译。
答案 0 :(得分:1)
任务不完整,因为每次使用命令make都会重新编译文件。
看这里:
XX= fight
run: sound.o light.o
$(CC) sound.o light.o -o $(XX)
./$(XX)
make规则的目标部分(此处为run
)应该是该规则的配方创建的文件的名称。您永远不会创建文件run
,因此此配方始终执行。这样做的正确方法如下:
run: fight
fight: sound.o light.o
$(CC) sound.o light.o -o$@
./$@
# this is to let make know that `run` does not create a file:
.PHONY: run