DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

原文地址:blog.csdn.net/ghostyu/article/details/7755177

1、目标名称,摆脱手动设置目标名称

[cpp] view plaincopy
 
  1. TARGET = $(notdir $(CURDIR))  
  2. all:$(TARGET)  
  3.     CMD....  

$(CURDIR) 表示Makfile当前目录全路径

$(notdir $(path)) 表示把path目录去掉路径名,只留当前目录名
这样就可以得到Makefile当前目录名称,用目录名作为目标程序名是一个不错的选择

2、使用include,把所有Makefile共享的设置包含进来

[cpp] view plaincopy
 
  1. BASE_DIR = /root/DM36x  
  2. include $(BASE_DIR)/Rules.make  
  3.   
  4. XDC_PATH = $(DMAI_INSTALL_DIR)/packages  
[cpp] view plaincopy
 
  1. DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了  

3、遍历遍历所有特定的源文件

[cpp] view plaincopy
 
  1. SOURCES = $(wildcard *.c)  
  2. HEADERS = $(wildcard *.h)  

如果当前目录先有 main.c  func.c  func.h 

这样SOURCES变量就等于main.c  func.c

HEADERS变量就等于func.h

这样就每次添加源文件后 就不需要重新修改makefile了

4、替换文件名称

[cpp] view plaincopy
 
  1. OBJFILES = $(SOURCES:%.c=%.o)  

如果SOURCES等与3中的main.c和func.c

这样OBJFILES就等于main.o func.o 

同样摆脱了手动修改编译的中间文件名

5、交叉编译设置

[cpp] view plaincopy
 
  1. VERBOSE = @  
  2. COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c  
  3. LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)  

 

6、编译

[cpp] view plaincopy
 
  1. $(OBJFILES):    %.o: %.c $(HEADERS)   
  2.   
  3.     @echo Compiling $@ from $<..  
  4.   
  5.     $(COMPILE.c)  -o $@ $<  

7、

[cpp] view plaincopy
 
  1. install:    $(if $(wildcard $(TARGET)), install_$(TARGET))  
  2. install_$(TARGET):  
  3.     @install -d $(EXEC_DIR)  
  4.     @install $(TARGET) $(EXEC_DIR)  
  5.     @install $(TARGET).txt $(EXEC_DIR)  
  6.     @echo  
  7.     @echo Installed $(TARGET) binaries to $(EXEC_DIR)..  

先判断当前目录是否有$(TARGET),如果有,就执行伪目标install_$(TARGET),这个展开了就相当于install_app,如果$(TARGET)等于app的话

posted on   DoubleLi  阅读(464)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2013-09-17 用ffmpeg把H264数据流解码成YUV420P
2013-09-17 在linux下读取bmp文件头的完整代码。
2013-09-17 在linux下实现用ffmpeg把YUV420帧保存成图片
2013-09-17 如何用ATL创建ActiveX控件
2013-09-17 用ATL和MFC来创建ActiveX控件
2013-09-17 列出我所知道的图像处理库
2013-09-17 jpeglib使用指南
点击右上角即可分享
微信分享提示