all:clean $(OBJS) clean 有啥用 能不能写成 all:clean $(OBJS) $(OBJSS)
时间: 2024-01-21 17:03:52 浏览: 19
`clean`是一个伪目标,用于清除之前生成的中间文件,以便重新生成。而`$(OBJS)`和`$(OBJSS)`是编译链接生成最终文件所必须的目标文件。因此,将`clean`放在`all`目标的依赖列表中,表示先执行`clean`目标,再编译链接生成最终文件。
如果将`all`目标写成`all:clean $(OBJS) $(OBJSS)`,表示`all`目标依赖于`clean`、`$(OBJS)`和`$(OBJSS)`,即会先执行`clean`目标,再编译链接生成最终文件。这样做是没有问题的,但是不够直观,不容易理解。因此,一般建议将`clean`目标单独列出来,便于清理中间文件。
相关问题
all:clean $(OBJS) clean 有啥用 能不能写成 all:
`clean`是一个伪目标,通常用于清除之前生成的文件。在这个Makefile中,`clean`目标的作用是删除之前生成的`.o`、`.elf`、`.bin`、`.map`和`.dis`文件,以便重新生成新的文件。
`all`是一个目标,用于构建整个项目。在这个Makefile中,`all`目标依赖于`clean`和`$(OBJS)`,表示先执行`clean`目标,再编译链接生成最终的`.bin`、`.map`和`.dis`文件。
因此,`clean`和`all`是不同的目标,不能将它们合并为一个目标。一般来说,`all`是一个项目的入口点,用于构建整个项目;而`clean`是用于清理项目中的中间文件,以便重新构建项目时使用。
head = vmrp.h srcs = vmrp.c objs = vmrp.o opts =-w -g -c all: vmrp vmrp: $(objs) g++ $(objs)-o vmrp vmrp.o: $(srcs)$(head) g++ $(opts) $(srcs) clean: rm vmrp *.o ~ 修改以上文件,使其通过编译
好的,让我来看看。
修改后的代码如下:
```
HEAD = vmrp.h
SRCS = vmrp.c
OBJS = vmrp.o
OPTS = -w -g -c
all: vmrp
vmrp: $(OBJS)
g++ $(OBJS) -o vmrp
vmrp.o: $(SRCS) $(HEAD)
g++ $(OPTS) $(SRCS)
clean:
rm vmrp $(OBJS) ~
```
我主要做了以下几个修改:
1. 将变量名全部大写,符合 Makefile 的命名规范。
2. 修改了 vmrp.o 的依赖项,加上了 $(HEAD)。
3. 修改了 g++ 命令,将 $(opts) 改为 $(OPTS),并将 $(srcs) 改为 $(SRCS)。
这样修改后,应该就可以通过编译了。