简易Makefile编写流程_20160917
来源:互联网 发布:r语言处理csv数据 编辑:程序博客网 时间:2024/05/22 06:19
一、编译环境准备:
1、指定编译器;
|---如CROSS_COMPILE = arm-hisiv100nptl-linux- ;
2、指定编译器类型; |---如 gcc 、g++;
3、指定链接方法;
|---g++ -o或者g++-ar cr 4、指定编译选项;
|---如-Wall -DBSD=1 -DLOCALE_NOT_USED
1、指定目标文件名;
|---如 LIVE_LIB := LibBufferApi.a LibBufferApi.so;
2、指定依赖头文件目录; |---如,INCLUDE_DIRS +=-I./
3、使用wildcard指定依赖的源码文件; |---如,DIR_C +=$(wildcard *.c)
4、使用patsubst将依赖的源码文件转换成链接文件*.o |---如,LIBOBJ +=$(patsubst %.c,%.o,$(DIR_C))
1、编写为all的目标,然后将最顶层的依赖原则写在all的后面;
|---如,all:$(LIB_NAME)
2、然后依次编写目标为all依赖文件的生成规则; |---如
================================================================
.PHONY:LibBufferAPI.so
LibBufferAPI.so:
$(CC) $(DIR_C) $(DIR_CPP) $(INCLUDE_DIRS) $(LIBRARY_DIRS) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $(LOPTION) -o $@ -shared -fPIC
$(STRIP) $@ $(STRIPFLAGS)
.PHONY:LibBufferAPI.a
LibBufferAPI.a:
$(CC) -c $(INCLUDE_DIRS) $(DIR_C) $(DIR_CPP) $(CFLAGS) $(CXXFLAGS) $(LOPTION)
$(AR) rv $@ $(LIBOBJ)
$(STRIP) $@ $(STRIPFLAGS)
===============================================================
3、编写目标为clean的规则,用你来清理工程编译后的文件; |---如,
================================================================
.PHONY:clean
clean:
rm -rf $(LIB_NAME) $(LIBOBJ)
================================================================
4、完整sample:
================================================================
CHIP_PLATFORM:=Hi-3531_V100
#CHIP_PLATFORM:=Hi-3531A_V300
#Toolchain
ifeq ($(CHIP_PLATFORM), Hi-3531_V100)
CROSS_COMPILE:=arm-hisiv100nptl-linux-
else
ifeq ($(CHIP_PLATFORM), Hi-3531A_V300)
CROSS_COMPILE:= /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-
endif
endif
LIB_NAME := libjnvsdk.so libjnvsdk.a
CC := $(CROSS_COMPILE)gcc
CXX := $(CROSS_COMPILE)g++
LD := $(CROSS_COMPILE)ld
AR := $(CROSS_COMPILE)ar
OBJCOPY := $(CROSS_COMPILE)objcopy
STRIP := $(CROSS_COMPILE)strip
STRIPFLAGS := -g --strip-unneeded
#Additional flags
INCLUDE_DIRS += -I./ \
-I./inc \
-I./open_interface
LIBRARY_DIRS += -L./ \
-L./lib
DIR_C +=$(wildcard ./*.c)
DIR_C +=$(wildcard ./src/*.c)
DIR_CPP +=$(wildcard ./*.cpp)
DIR_CPP +=$(wildcard ./src/*.cpp)
LIBOBJ :=
LIBOBJ +=$(patsubst %.c,%.o,$(DIR_C))
LIBOBJ +=$(patsubst %.cpp,%.o,$(DIR_CPP))
#C部分指定宏用
CFLAGS += -DLINUX_PLATFORM=1
#C++部分指定宏用
CXXFLAGS +=
#链接库名称
LDFLAGS += -lpthread -lstdc++
#编译选项
LOPTION +=
all:$(LIB_NAME)
.PHONY:libjnvsdk.so
libjnvsdk.so:
$(CC) $(DIR_C) $(DIR_CPP) $(INCLUDE_DIRS) $(LIBRARY_DIRS) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $(LOPTION) -o $@ -shared -fPIC
$(STRIP) $@ $(STRIPFLAGS)
.PHONY:libjnvsdk.a
libjnvsdk.a:
$(CC) -c $(INCLUDE_DIRS) $(DIR_C) $(DIR_CPP) $(CFLAGS) $(CXXFLAGS) $(LOPTION)
$(AR) rv $@ $(LIBOBJ)
$(STRIP) $@ $(STRIPFLAGS)
.PHONY:clean
clean:
rm -rf $(LIB_NAME) $(LIBOBJ)
================================================================
1 0
- 简易Makefile编写流程_20160917
- Makefile 编写 简易教程 (实例)
- 用C#编写Windows服务简易流程
- gcc的使用以及编写简易的Makefile
- linux下安装 mysql,以及简易Makefile的编写
- 借助 GNU autotools 生成 makefile 的简易流程
- 编写Makefile
- Makefile编写
- makefile编写
- makefile 编写
- makefile编写
- Makefile 编写
- makefile编写
- Makefile编写
- 编写Makefile
- Makefile编写
- makefile编写
- Makefile 编写
- CTF训练营-牛刀小试-被改错的密码
- JAVA几种缓存技术介绍说明
- listview优化
- MyEclipse 2015实现JavaScript代码自动提示(不需要额外安装插件)
- 表空间的管理-字典和本地管理
- 简易Makefile编写流程_20160917
- java 线程:sleep join yield | wait notify notifyAll
- TCP/IP传输层,你懂多少?
- compileSdkVersion buildToolsVersion minSdkVersion targetSdkVersion 理解
- Python 包、模块 概念 from 、import 关键字
- C#之WinForm基础 使用timer空间每500毫秒,textbox增加一个字
- 带你理解beta分布
- 第3周项目4-顺序表应用问题(2)
- 数据库事务隔离级别