.PHONY:clean clean: @echo remove all object files and lib -rm -f *.o *.core $(TARGET) r: make clean make
时间: 2024-02-15 10:48:35 浏览: 127
这是一个 Makefile 文件,主要定义了两个伪目标(.PHONY):clean 和 r。
clean 目标的作用是删除所有的目标文件、core 文件和库文件。
r 目标是一个快捷方式,它先执行 clean 目标,然后再执行 make 命令重新编译程序。
其中,-rm -f 表示强制删除文件,即使文件不存在也不会报错。*.o 表示所有的目标文件,*.core 表示所有的 core 文件,$(TARGET) 表示所有的库文件。
相关问题
解析makefile文件:CC = gcc PROG = sensor_server OBJS = sensor_utils.o sensor_protocol.o sensor_platform.o sensor_command.o mq_rabbit.o cJSON.o CLIB = ../common/libcommon.a INCLUDES = -I../common -I/usr/include/ CLINK = -lpthread -lz -liniparser -lrabbitmq -lm CFLAGS = -Wall -O2 all: $(PROG) $(PROG): %: %.c $(OBJS) $(CLIB) $(CC) -o $@ $@.c $(OBJS) $(CLIB) $(INCLUDES) $(CLINK) $(CFLAGS) $(OBJS): %.o : %.c %.h $(CC) -c $< $(INCLUDES) $(CFLAGS) .PHONY : install clean install: #cp -f $(PROG) /usr/local/bin/ clean: rm -f $(PROG) *.o *core
这是一个简单的Makefile文件,用于编译和构建名为 `sensor_server` 的程序。以下是对该Makefile文件的解析:
- `CC = gcc`:定义了变量 `CC`,指定了使用的编译器为 `gcc`。
- `PROG = sensor_server`:定义了变量 `PROG`,指定了生成的可执行文件名为 `sensor_server`。
- `OBJS = sensor_utils.o sensor_protocol.o sensor_platform.o sensor_command.o mq_rabbit.o cJSON.o`:定义了变量 `OBJS`,指定了需要编译的目标文件列表。
- `CLIB = ../common/libcommon.a`:定义了变量 `CLIB`,指定了需要链接的静态库文件路径和名称。
- `INCLUDES = -I../common -I/usr/include/`:定义了变量 `INCLUDES`,指定了头文件搜索路径。
- `CLINK = -lpthread -lz -liniparser -lrabbitmq -lm`:定义了变量 `CLINK`,指定了链接时需要的库文件。
- `CFLAGS = -Wall -O2`:定义了变量 `CFLAGS`,指定了编译选项。
- `all: $(PROG)`:定义了默认目标 `all`,依赖于 `$(PROG)`。
- `$(PROG): %: %.c $(OBJS) $(CLIB)`:定义了生成可执行文件的规则。依赖于 `.c` 文件、目标文件列表和静态库文件。使用 `$@` 表示目标文件名,即 `sensor_server`。使用 `$<` 表示第一个依赖文件,即对应的 `.c` 文件。
- `$(OBJS): %.o : %.c %.h`:定义了生成目标文件的规则。依赖于对应的 `.c` 文件和 `.h` 文件。
- `.PHONY : install clean`:定义了伪目标 `install` 和 `clean`。
- `install:`:伪目标 `install` 的指令部分被注释掉了,即没有实际的操作。
- `clean:`:定义了 `clean` 目标的规则,用于删除可执行文件和目标文件。
通过运行 `make` 命令,根据Makefile文件中的规则,可以编译和构建 `sensor_server` 程序。运行 `make install` 可以执行安装操作(该部分被注释掉了)。运行 `make clean` 可以执行清理操作,删除生成的可执行文件和目标文件。
CC = gcc OBJS = deps = $(shell find ./ -name "*.h") LD = -lpthread all:Threadtask Threadtask:$(OBJS) CC -o Threadtask $() $(LD) (4):writefunc.h (5):readfunc.h .PHONY: clean all clean: rm -f *.o Threadtask 补全上述代码
好的,下面是补全后的代码:
```makefile
CC = gcc
OBJS =
deps = $(shell find ./ -name "*.h")
LD = -lpthread
all: Threadtask
Threadtask: $(OBJS)
CC -o Threadtask $^ $(LD)
%.o: %.c $(deps)
CC -c -o $@ $<
writefunc.o: writefunc.h
readfunc.o: readfunc.h
.PHONY: clean all
clean:
rm -f *.o Threadtask
```
其中:
- `$(OBJS)` 表示 `Threadtask` 需要依赖的目标文件(这里为空)。
- `$^` 表示依赖列表中的所有目标文件。
- `%.o: %.c $(deps)` 表示生成 `.o` 文件的规则,其中 `%` 代表匹配任意字符,`$<` 表示依赖列表中的第一个文件,即 `.c` 文件。
- `writefunc.o: writefunc.h` 和 `readfunc.o: readfunc.h` 表示 `writefunc.o` 和 `readfunc.o` 文件分别依赖于 `writefunc.h` 和 `readfunc.h` 头文件。
此外,`.PHONY` 表示 `clean` 和 `all` 是伪目标,不是真正的文件,可以避免因为存在同名文件而出现问题。`clean` 是清理目标,用于删除生成的目标文件和可执行文件。
阅读全文