通用Makefile模板与编译Linux的脚本

前言:

由于工作,编译应用层程序、编译动态&静态库、编译Linux驱动模块,因此需要一个强大的Makefile的模板,只需要通过开关方便控制编译方向。
该模板参考了网上许多的Makefile模板,也参考了Linux内核中的Makefile,修改为适应工程使用的Makefile模板,分享出来供大家参考使用。测试可用,若需要使用,需要修改部分参数。
后面附带一个用于Linux源码下的内核配置(.config)、编译内核(zImage)、编译设备树(.dtb)、编译内核模块(.ko)、清除配置的Shell脚本。需要执行某个功能时,指定交叉编译器的命令不可注释(条件),取消注释可实现该功能的命令,其他行功能的命令继续注释。

设置开机自动将交叉编译器的路径添加进环境变量里
# 1 打开/etc/profile文件
$ sudo vim /etc/profile

# 2 将下面的内容添加到/etc/profile文件最后一行
export PATH=$PATH:/XXX/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/

# 3 在当前bash环境下读取并执行/etc/profile中的命令
$ source /etc/profile

# 4 检测检查编译器是否可用
$ arm-linux-gnueabihf-gcc -v

1. 编译应用层程序的Makefile模板

# 目标文件的运行平台: ARM x86 MIPS RISC
RUN_ARCH := ARM

# 生成指定的目标文件名,目标文件的拷贝路径
TARGET_FILE  := testsizeof
TARGET_PATH  := ~/nfs/

# 编译工具
ifeq ($(RUN_ARCH), ARM)
	export CROSS := arm-linux-gnueabihf-
else ifeq ($(RUN_ARCH), x86)
	export CROSS := 
endif
# CROSS = arm-linux-gnueabihf-
export CC       = $(CROSS)gcc
export CXX      = $(CROSS)g++
export AR       := $(CROSS)ar
export AS       := $(CROSS)as
export STRIP    := $(CROSS)strip
export CPP      = $(CC) -E
export OBJCOPY  = $(CROSS)objcopy
export OBJDUMP  = $(CROSS)objdump
export NM       = $(CROSS)nm
export LD       = $(CROSS)ld

# 源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
SOURCE  := $(wildcard *.c) $(wildcard *.cpp)
OBJS    := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))

# 编译参数
LIBS    := -L/mnt/hgfs/Share_Ubuntu/Temp_File/test4/Lib/lib
LDFLAGS := -ltest
DEFINES :=
INCLUDE := -I /mnt/hgfs/Share_Ubuntu/Temp_File/test4/Lib/include/
CFLAGS  := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H


# 下面的基本上不需要做任何改动了
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET_FILE)
all : $(TARGET_FILE)
objs : $(OBJS)
rebuild: veryclean everything
clean :
	rm -rf *.o $(TARGET_FILE)
veryclean : clean
	rm -rf $(TARGET_FILE)

# 编译.c/.cpp文件为.o文件
$(OBJS): $(SOURCE)
	@echo "\n **** Top Dir **** .c --> .o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值