(1)编译前组织结构
(2)进行编译
(3)编译后组织结构
(4)makefile代码
TARGET = random-test-server
SRC_DIR = ./src
OBJS_DIR = ./obj
SRC = $(notdir $(wildcard $(SRC_DIR)/*.c )) #不带目录
OBJS = $(patsubst %.c,%.o, $(SRC)) #不带目录
CC = gcc
CFLAGS = -c -g -Wall
INC = -I ./inc
LIB = -L ./lib/ -lmodbus
$(TARGET):$(addprefix $(OBJS_DIR)/,$(OBJS)) #指定特定目录下的.o文件
$(CC) $^ -o $@ $(LIB)
$(OBJS_DIR)/%.o:$(SRC_DIR)/%.c #指定特定目录下的.c文件和.o文件
$(CC) $^ -o $@ $(INC) $(CFLAGS)
clean:
rm $(addprefix $(OBJS_DIR)/,$(OBJS)) $(TARGET) -rf
#测试不同的通配符下实际的表达式
# all:
# @echo $(SRC)
# @echo $(OBJS)
# @echo $(addprefix $(OBJS_DIR)/,$(OBJS))
其中
wildcard 进行通配
notdir 去掉目录
patsubst 对应替代
addprefix 添加前缀
(5)字符测试makefile
TARGET = random-test-server
SRC_DIR = ./src
OBJS_DIR = ./obj
SRC = $(notdir $(wildcard $(SRC_DIR)/*.c )) #不带目录
OBJS = $(patsubst %.c,%.o, $(SRC)) #不带目录
CC = gcc
CFLAGS = -c -g -Wall
INC = -I ./inc
LIB = -L ./lib/ -lmodbus
# $(TARGET):$(addprefix $(OBJS_DIR)/,$(OBJS)) #指定特定目录下的.o文件
# $(CC) $^ -o $@ $(LIB)
# $(OBJS_DIR)/%.o:$(SRC_DIR)/%.c #指定特定目录下的.c文件和.o文件
# $(CC) $^ -o $@ $(INC) $(CFLAGS)
# clean:
# rm $(addprefix $(OBJS_DIR)/,$(OBJS)) $(TARGET) -rf
#测试不同的通配符下实际的表达式
all:
@echo $(SRC)
@echo $(OBJS)
@echo $(addprefix $(OBJS_DIR)/,$(OBJS))
进行编译