简易Makefile编写流程_20160917

一、编译环境准备:
    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值