当前位置: 首页 > news >正文

Ubuntu解决makefile交叉编译的问题

问题1:


/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: cannot find -lwiringpi: No such file or directory
找不到-lwiringpi库路径,其实在3rd/usr/lib/aarch64-linux-gnu下没有libwiringPi.so.2                                                                                                                                                                 libwiringPi.so.2.50的文件

解决方法:

安装 ARM64 版本的 deb 包
如果你有 ARM64 设备,可以直接在设备上运行:sudo apt update
sudo apt install wiringpi
然后将 /usr/lib/aarch64-linux-gnu/libwiringPi.so.* 复制到宿主机的交叉编译路径中(如 ./3rd/usr/lib/aarch64-linux-gnu/)。

问题二:

/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: cannot open output file obj/garbage: No such file or directory

一个错误:`cannot open output file obj/garbage: No such file or directory`。这意味着在链接时,无法创建输出文件`obj/garbage`。可能的原因是目录`obj`不存在,或者权限问题。查看Makefile,我注意到在链接目标之前,有一个命令尝试创建目录,但可能存在一些问题。

  1. 修正了OBJ变量的定义,使用正确的patsubst模式:$(patsubst src/%.c,obj/%.o,$(SRC))

  2. 删除了无效的目录创建命令$(shell mkdir -p $(dir &(OBJ)))(因为存在语法错误且不需要)

  3. 在模式规则obj/%.o中,将$(dir &(OBJ))修正为$(dir $@),确保创建当前目标文件的目录

  4. 在链接规则$(TARGET)中,添加了目录创建命令@mkdir -p $(dir $(TARGET)),确保输出目录存在

  5. 链接命令中移除了$(CFLAGS),因为链接阶段不需要头文件路径

问题3:

huang@huang-Ubuntu:~/smart_brush_can$ make compile
aarch64-linux-gnu-gcc -o obj/smartRubishCan.o -c src/smartRubishCan.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/socket.o -c src/socket.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/uartTool.o -c src/uartTool.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/p_smartTrashCan.o -c src/p_smartTrashCan.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/garbage.o -c src/garbage.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/garbage obj/smartRubishCan.o obj/socket.o obj/uartTool.o obj/p_smartTrashCan.o obj/garbage.o -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu  -L./3rd/usr/local/lib -L./3rd/lib/aarch64-linux-gnu -L./3rd/usr/lib/aarch64-linux-gnu -L./3rd/usr/lib/python3.10 -lwiringPi -lpython3.10 -pthread -lcrypt    # 链命令
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: warning: libexpat.so.1, needed by ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: warning: libz.so.1, needed by ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ExpatVersion'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndElementHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ParserCreate_MM'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEncoding'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateEnd'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetBase'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetParamEntityParsing'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetNamespaceDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflate'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateInit_'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetErrorCode'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetUserData'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ExternalEntityParserCreate'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateCopy@ZLIB_1.2.0'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetCurrentColumnNumber'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateInit2_'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartDoctypeDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartCdataSectionHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflate'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetDefaultHandlerExpand'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetExternalEntityRefHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetXmlDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `crc32'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetInputContext'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartNamespaceDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateEnd'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndDoctypeDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `zlibVersion'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_FreeContentModel'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_UseForeignDTD'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetDefaultHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ParseBuffer'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetSpecifiedAttributeCount'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetNotStandaloneHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateSetDictionary'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ExpatVersionInfo'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetCurrentLineNumber'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndCdataSectionHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetCommentHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetSkippedEntityHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetProcessingInstructionHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetBase'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetElementDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ErrorString'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndNamespaceDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetNotationDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetReturnNSTriplet'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEntityDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateCopy'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ParserFree'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateInit2_'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetElementHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetUnknownEncodingHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_StopParser'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetFeatureList'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetAttlistDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartElementHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_Parse'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetBuffer'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateSetDictionary'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetCurrentByteIndex'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `adler32'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetCharacterDataHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetUnparsedEntityDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetHashSalt'
collect2: error: ld returned 1 exit status
make: *** [Makefile:41: obj/garbage] Error 1
huang@huang-Ubuntu:~/smart_brush_can$

主要问题是缺少两个重要的库:libexpat.so.1 和 libz.so.1。这些库是 Python 运行时所依赖的。

解决方法:

在 LIBS 变量中添加缺失的库:

LIBS := -lwiringPi -lpython3.10 -lexpat -lz -pthread -lcrypt -ldl -lutil -lm

最终解决好啦


huang@huang-Ubuntu:~/smart_brush_can$ make compile
aarch64-linux-gnu-gcc -o obj/garbage obj/smartRubishCan.o obj/socket.o obj/uartTool.o obj/p_smartTrashCan.o obj/garbage.o -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu  -L./3rd/usr/local/lib -L./3rd/lib/aarch64-linux-gnu -L./3rd/usr/lib/aarch64-linux-gnu -L./3rd/usr/lib/python3.10 -lwiringPi -lpython3.10 -pthread -lcrypt -lexpat -lz -lm -ldl -lutil    # 链命令
huang@huang-Ubuntu:~/smart_brush_can$ ^C
huang@huang-Ubuntu:~/smart_brush_can$ ls -la obj/garbage
-rwxrwxr-x 1 huang huang 25112 Aug 22 09:03 obj/garbage
huang@huang-Ubuntu:~/smart_brush_can$ file obj/garbage
obj/garbage: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=d6f9ab643d3320ef46676e0c6a698cfcdfb9bc2f, for GNU/Linux 3.7.0, not stripped
huang@huang-Ubuntu:~/smart_brush_can$

makefile

# 定义交叉编译工具
CC := aarch64-linux-gnu-gcc
# 存放所有的.c文件,shell函数查找所有当前目录及其子目录的.c文件
SRC := $(shell find src -name "*.c")
# 头文件
INC := ./inc \./3rd/usr/local/include \./3rd/usr/include \./3rd/usr/include/python3.10 \./3rd/usr/include/aarch64-linux-gnu/python3.10 \./3rd/usr/include/aarch64-linux-gnu# 所有.c文件生成.o在obj文件夹
OBJ := $(patsubst src/%.c,obj/%.o,$(SRC))# 创建目标,存在obj/garbage
TARGET := obj/garbage# 存放-I的所有头文件,foreach函数就是将INC的变量前面加上-I
CFLAGS := $(foreach item,$(INC),-I$(item)) LIB_PATH := ./3rd/usr/local/lib \./3rd/lib/aarch64-linux-gnu \./3rd/usr/lib/aarch64-linux-gnu \./3rd/usr/lib/python3.10# 指定库文件路径,foreach函数就是将LIB_PATH的变量前面加上-L
LDFLAGS := $(foreach item,$(LIB_PATH),-L$(item))# 链接库
LIBS := -lwiringPi -lpython3.10 -pthread -lcrypt -lexpat -lz -lm -ldl -lutil# 每个.c对应一个.o文件,通配符%
obj/%.o: src/%.c@mkdir -p $(dir $@)    # 创建obj文件夹$(CC) -o $@ -c $< $(CFLAGS)    # 类似gcc -o garbage garbage.c -I./inc  指令# 将.o文件连接输出obj/garbage
$(TARGET): $(OBJ)@mkdir -p $(dir $(TARGET))$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS)    # 链命令# 编译指令
compile: $(TARGET)# 调试指令
debug:@echo "CC: $(CC)"@echo "SRC: $(SRC)"@echo "OBJ: $(OBJ)"@echo "TARGET: $(TARGET)"@echo "CFLAGS: $(CFLAGS)"@echo "LDFLAGS: $(LDFLAGS)"@echo "First object rule example:"@echo "  obj/$(firstword $(notdir $(OBJ))): src/$(firstword $(notdir $(SRC)))"# 清除指令
clean:rm -rf $(TARGET) obj# 伪目标
.PHONY: debug compile clean

http://www.dtcms.com/a/346400.html

相关文章:

  • 提升用户体验的交互设计实战指南:方法、流程与技巧
  • 在通义灵码中配置MCP服务
  • Linux--进程核心概念
  • 基于SamGeo模型和地图客户端的实时图形边界提取
  • 把 AI 变成「会思考的路灯」——基于自学习能耗模型的智慧路灯杆
  • Open3d:点对点ICP配准,点对面ICP配准
  • 105.QML实现现代Neumorphism风格界面01-Button实现
  • 如何提升科研能力:先停止“无效工作”,开始“有效科研”
  • 第二节阶段WinFrom-5:文件操作
  • 车载诊断架构 --- EOL引起关于DTC检测开始条件的思考
  • Linux822 shell:expect 批量
  • 《C++起源与核心:版本演进+命名空间法》
  • 易基因:Nat Commun/IF15.7:多组学研究揭示UHRF2在原始生殖细胞DNA甲基化重编程中的抗性调控机制
  • 光耦合器:电子世界的 “光桥梁“
  • Opnecv详细介绍
  • 量子计算基础
  • C#_组合优于继承的实际应用
  • 音视频处理工作室:实时通信的媒体层设计
  • 容器操作案例
  • C语言——内存函数
  • TTS文字合成语音芯片的使用场景
  • No module named blake2b
  • GaussDB GaussDB 数据库架构师修炼(十八)SQL引擎(1)-SQL执行流程
  • ODDR双边沿数据输出
  • 1小时检测cAMP的武功秘籍
  • AI 绘画争议背后:版权归属、艺术原创性与技术美学的三方博弈
  • Linux系统安装llama-cpp并部署ERNIE-4.5-0.3B
  • Unity--判断一个点是否在扇形区域里面(点乘和叉乘的应用)
  • Day2--HOT100--283. 移动零,11. 盛最多水的容器,15. 三数之和
  • 94. 城市间货物运输 I, Bellman_ford 算法, Bellman_ford 队列优化算法