makefile 嵌套
目录结构:
dynamic 和 static 两个目录实现加法功能, 分别生成动态库和静态库, main.c 主文件链接加法功能, 终端命令执行: make dynamic=1 则编译动态库进行链接 , make 静态库编译
动态库的makefile内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # CROSS_COMPILE := # CC := $(CROSS_COMPILE)gcc # CPP := $(CROSS_COMPILE)g++ TARGET := libadd.so OBJ := sub.o SRCS = $(wildcard *.c) all: $(CC) -c -o $(OBJ) -fPIC $(SRCS) $(CC) -shared -fPIC -o $(TARGET) $(OBJ) .PHONY : clean clean: rm $(OBJ) $(TARGET) -f |
静态库makefile内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # CROSS_COMPILE := # CC := $(CROSS_COMPILE)gcc # CPP := $(CROSS_COMPILE)g++ # AR := $(CROSS_COMPILE)ar TARGET := libadd.a OBJ := sub.o SRCS = $(wildcard *.c) all: $(CC) -c -o $(OBJ) $(SRCS) $(AR) -rcs -o $(TARGET) $(OBJ) .PHONY : clean clean: rm $(OBJ) $(TARGET) -f |
根目录的makefile内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | CROSS_COMPILE := CC = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)AR CPP = $(CROSS_COMPILE)g++ LD = $(CROSS_COMPILE)ld NM = $(CROSS_COMILE)nm STRIP = $(CROSS_COMPILE)strip OBJDUMP = $(CROSS_COMPILE)objdump OBJCOPY = $(CROSS_COMPILE)objcopy ifndef dynamic LIBPATH := static else LIBPATH := dynamic endif CFLAGS := -Wall -O2 -g CFLAGS += -I $(shell pwd)/$(LIBPATH) LDFLAGS := -lm -L$(LIBPATH) -ladd TOPDIR := $(shell pwd) SRCS = $(wildcard *.c) TARGET := main OBJ := main.o all:$(TARGET) # $(TARGET): 这种方式不会自动推导调用 %.o:%.c 这个内容 $(TARGET):$(OBJ) make -C $(LIBPATH) $(CC) $(OBJ) $(CFLAGS) $(LDFLAGS) -o $(TARGET) # 这样放会出现找不到链接库的问题,源文件要放在链接库前面 # $(CC) $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(SRCS) %.o:%.c $(CC) -c $(CFLAGS) $^ -o $@ # .PHONY是一个伪目标,可以防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突 .PHONY : clean clean: make -C $(LIBPATH) clean rm $(OBJ) $(TARGET) -f |
源码下载路径: https://download.csdn.net/download/aba13579/10777167
参考链接: https://blog.csdn.net/qq_21792169/article/details/50448639
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2017-11-10 modbus 寄存器介绍