工程中编写自己的makefile---8 编写Arm开发板的makefile
2017-06-05 16:37
232 查看
1 编写开发板的程序的makefile
基于以上的学习,下面编写一个基于Hi3520D开发板的程序工程目录结构如下
.
├── Components
│ ├──Common
│ │ ├── xx_inc.h
│ │ ├── xx_type.h
│ ├──HAL
│ │ ├── Common
│ │ │ ├── xx_inc_hal.h
│ │ ├── Include
│ │ │ ├── xx_alarm_in.h
│ │ │ ├── xx_alarm_out.h
│ │ │ ├── xx_tm7705.h
│ │ ├── Source
│ │ │ ├── xx_alarm_in.c
│ │ │ ├── xx_alarm_out.c
│ │ │ ├── xx_tm7705.c
│ │ └── Makefile
│ ├──MCU
│ │ ├── Common
│ │ │ ├── xx_inc_mcu.h
│ │ ├── Include
│ │ │ ├── hi35xx_gpio.h
│ │ │ ├── xx_uart.h
│ │ ├── Source
│ │ │ ├── hi35xx_gpio.c
│ │ │ ├── xx_uart.c
│ │ └── Makefile
│ ├──Protocal
│ │ ├── Common
│ │ │ ├── xx_inc_ip.h
│ │ ├── Include
│ │ │ ├── gk_protocal.h
│ │ │ ├── xx_crc.h
│ │ │ ├── xx_protocal.h
│ │ ├── Source
│ │ │ ├── gk_protocal.c
│ │ │ ├── xx_crc.c
│ │ │ ├── xx_protocal.c
│ │ └── Makefile
│ ├──Services
│ │ ├── Common
│ │ │ ├── xx_inc_ip.h
│ │ ├── Include
│ │ │ ├── xx_dbug.h
│ │ │ ├── xx_inifile.h
│ │ │ ├── xx_pthread_mutex.h
│ │ │ ├── xx_socket.h
│ │ │ ├── xx_waiter.h
│ │ ├── Source
│ │ │ ├── xx_dbug.c
│ │ │ ├── xx_inifile.c
│ │ │ ├── xx_pthread_mutex.c
│ │ │ ├── xx_socket.c
│ │ │ ├── xx_waiter.c
│ │ └── Makefile
├── Project
│ ├── main.h
│ ├── main.c
│ ├── Makefile(主)
│ ├──Iot_hornet
│ │ ├── iot_intfc.h
│ │ ├── iot_main.h
│ │ ├── iot_intfc.c
│ │ ├── iot_main.c
│ │ └──Makefile
│ ├──wlan_select
│ │ ├── wlan_main.h
│ │ ├── wlan_main.c
│ │ └── Makefile
├── Object(存放所有目标文件(.o文件)的文件夹)
1.1 编写子makefile
相对来说,子makefiled都是相同,所做的工作就是把子makefile同目录下的所有文件下的.c源文件全部便宜为相应的.o目标文件,然后把所有的.o文件cp到Object目录下;
#$(shell ls -d */) 命令打印当前目录下的所有文件夹
DIRS := $(shell ls -d*/) ./
FILES := $(foreachdirs, $(DIRS), $(wildcard $(dirs)*.c))
OBJS := $(patsubst%.c, %.o, $(FILES))
all:$(OBJS)$(OBJSDIR)
#$(OBJS):%.o:%.c
# $(CC) -c $< -o $@ $(CFLAGS)
#依赖一个伪目标,这样每次编译时因为ALWAYSMAKE不存在,都会执行命令
$(OBJSDIR):ALWAYSMAKE
cp $(OBJS) $(OBJSDIR)
.PHONY:clean
clean:
$(RM) $(OBJS)
.PHONY:ALWAYSMAKE
ALWAYSMAKE:
1.2 编写主makefile
export WORKDIR :=$(shell pwd)/..export OBJSDIR :=$(WORKDIR)/Object
export LIBS :=-lpthread -lmpi -ltde -laec -ljpeg -lanr -lresampler -lVoiceEngine
export MPPLIBS :=-L/opt/Hi3520D_SDK_V1.0.5.0/mpp/lib
export CC :=arm-hisiv100nptl-linux-gcc
#头文件路径
export CFLAGS := \
-I$(WORKDIR)/Components/Common\
-I$(WORKDIR)/Components/HAL/Common\
-I$(WORKDIR)/Components/HAL/Include\
-I$(WORKDIR)/Components/MCU/Common\
-I$(WORKDIR)/Components/MCU/Include\
-I$(WORKDIR)/Components/Protocal/Common\
-I$(WORKDIR)/Components/Protocal/Include\
-I$(WORKDIR)/Components/Services/Common\
-I$(WORKDIR)/Components/Services/Include\
-I$(WORKDIR)/Project/Iot_hornet\
-I$(WORKDIR)/Project/wlan_select\
-I$(WORKDIR)/Project\
-I/opt/Hi3520D_SDK_V1.0.5.0/mpp/include\
-O0 -Wall -g3
RM := rm -f
OBJS := main.o
TARGET := xxproject
$(TARGET):$(OBJS)$(OBJSDIR)
$(MAKE) -C$(WORKDIR)/Components/Protocal/
$(MAKE) -C$(WORKDIR)/Components/Services/
$(MAKE) -C $(WORKDIR)/Components/HAL/
$(MAKE) -C $(WORKDIR)/Components/MCU/
$(MAKE) -C $(WORKDIR)/Project/wlan_select/
$(MAKE) -C$(WORKDIR)/Project/Iot_hornet/
$(CC) $(MPPLIBS) -o $(TARGET)$(OBJSDIR)/*.o $(CFLAGS) $(LIBS)
#$(OBJS):%.o:%.c
# $(CC) -c $< -o $(OBJSDIR)/$@ $(CFLAGS)
#依赖一个伪目标,这样每次编译时因为ALWAYSMAKE不存在,都会执行命令
$(OBJSDIR):ALWAYSMAKE
cp $(OBJS) $(OBJSDIR)
.PHONY:clean
clean:
$(MAKE) clean -C$(WORKDIR)/Components/Protocal/
$(MAKE) clean -C$(WORKDIR)/Components/Services/
$(MAKE) clean -C$(WORKDIR)/Components/HAL/
$(MAKE) clean -C$(WORKDIR)/Components/MCU/
$(MAKE) clean -C $(WORKDIR)/Project/wlan_select/
$(MAKE) clean -C$(WORKDIR)/Project/Iot_hornet/
$(RM) $(OBJS) $(TARGET)
$(RM) $(OBJSDIR)/*.o
.PHONY:ALWAYSMAKE
ALWAYSMAKE:
相关文章推荐
- 工程中编写自己的makefile---7 shell学习
- 工程中编写自己的Makefile---1 一些基本概念
- 工程中编写自己的makefile---2 实例
- 工程中编写自己的makefile---3 交叉编译工具
- 工程中编写自己的makefile---4 库文件
- 工程中编写自己的makefile---5 在实例2中使用库文件
- 工程中编写自己的makefile---6 makefile学习
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- 自己动手编写Makefile
- 自己编写Makefile
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- 如何自己编写Makefile(简单介绍)
- 如何自己编写Makefile(高级篇)
- 如何自己编写makefile
- 编写自己的Makefile
- 一个自己编写的象棋程序,可实现走棋谱(如炮二平五),工程完成度%96,跟大家分享一下,下一步要做残局,欢迎交流
- makefile编写---多目录工程范例
- 如何自己编写Makefile
- linux下编写opencv工程的makefile