makefile编译带头文件的c程序:
- 程序文件目录
文件夹 | 文件夹所对应的作用 |
---|---|
bin | 存放可执行文件的地方 |
include | 存放.h头文件的地方 |
obj | 存放.o文件的地方 |
src | 存放.c源文件的地方 |
-
定义每个文件夹的路径
DIR_INC = ./include DIR_SRC = ./src DIR_OBJ = ./obj DIR_BIN = bin
-
获取src文件夹下面所有的.c文件。
SRC = $(wildcard $(DIR_SRC)/*.c)
-
将src目录下的.c文件全部改成obj目录下的.o文件
OBJ = $(patsubst %.c,$(DIR_OBJ)/%.o,$(notdir $(SRC)))
-
.o文件生成的条件
$(DIR_OBJ)/%.o : $(DIR_SRC)/%.c @gcc -c -I$(DIR_INC) $^ -o $@
-
生成可执行文件
exec : $(OBJ) gcc $^ -o $@
-
执行文件命令
run : exec ./$<
-
清除文件命令
clean : rm -rf obj/* rm -rf bin/*
-
定义命令
.PHONY: clean run
完整代码:
#定义各文件路径
DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./obj
DIR_BIN = bin
#获取src路径下的所有c文件
SRC = $(wildcard $(DIR_SRC)/*.c)
#将src目录下的.c文件全部改成obj目录下的.o文件
OBJ = $(patsubst %.c,$(DIR_OBJ)/%.o,$(notdir $(SRC)))
TARGET = $(DIR_BIN)/main
# .o文件生成的条件
$(DIR_OBJ)/%.o : $(DIR_SRC)/%.c
@gcc -c -I$(DIR_INC) $^ -o $@
#编译生成可执行文件
#$(TARGET) : $(OBJ)
# gcc $^ -o $@
# 生成可执行文件
exec : $(OBJ)
gcc $^ -o $@
# 执行文件
run : exec
./$<
debug :
@echo $(CFLAGS)
#清除文件命令
clean :
rm -rf obj/*
rm -rf bin/*
.PHONY:debug clean create run