- 想实现效果:
- 项目具有一个源码目录(即:所有源码都位于 src 目录下,当然 src 也是有层次目录结构的了)
- 项目编译过后,在 src 同层次创建一个 obj 目录,其子目录结构与 src 子目录结构完全相同,不同的是这个目录下放的是编译过后的 .o 文件(绝对代码洁癖,另外就是 java 的 UT 习惯了。。。。)
- 编译过后的可执行文件放在与 src 同层次的目录下, 当然一个较大的项目生成的可执行文件绝对不止一个,这个问题日后讨论
- 简单的源码结构还是和专题(一)中相同,见这儿:点击这儿
- 要求: src 下面不可以直接是文件,源文件必须放在 src 下的某个目录下
- 直接贴 Makefile 的源码,主要是一些函数的使用,没什么复杂的内容,常用函数的总结帖我有时间再写:
CC = gcc CFLAGS = -Wall LDFLAGS = -lm INCLUDES = -I src/include SRC_DIR = src/main src/tools OBJ_DIR = obj OBJ_PATH = $(addprefix $(OBJ_DIR)/, $(subst src/,, $(SRC_DIR))) SRC_FILES = $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.c)) OBJS = $(subst src,obj, $(patsubst %.c,%.o, $(SRC_FILES))) MAKE_OBJ_DIR := $(shell mkdir -p $(OBJ_PATH)) EXECUTABLE = test_makefile all : $(OBJS) $(CC) $(LDFLAGS) $(INCLUDES) $(OBJS) -o $(EXECUTABLE) $(OBJS) : $(SRC_FILES) $(CC) $(CFLAGS) $(INCLUDES) -c $(subst obj,src, $(patsubst %.o,%.c, $@)) -o $@ clean : -rm -rf ./obj -rm -rf $(EXECUTABLE)
GNU Makefile学习专题(二) | 第二个实例
最新推荐文章于 2022-03-05 14:57:41 发布