linux应用程序_1_文本浏览器_7_Makefile_3_通用性改进

本文介绍了一种改进的Makefile配置方法,使同一源代码既能在本地GCC环境下编译,也能在ARM-Linux交叉编译环境中编译。通过条件判断和宏定义,实现了对编译选项、链接选项和依赖项的智能选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux应用程序_1_文本浏览器_7_Makefile_3_通用性改进

 

改进上文Makefile,使其既能使用gcc编译、又能使用arm-linux-gcc编译,为此用到了Makefile的条件判断以及编译中与宏相关的选项

基本思路:根据工具链不同,选择性添加编译选项、链接选项、依赖、宏

 

使用gcc编译:make distclean && make CROSS_COMPILE= 

使用arm-linux-gcc编译:make distclean && make CROSS_COMPILE=arm-linux-

make distclean是为了清除中间文件,防止两种编译切换时出错

如果在命令行不指定CROSS_COMPILE,CROSS_COMPILE使用Makefile中的默认值arm-linux-

 

依据上文的Makefile修改:

一、顶层Makefile

1、编译选项:CFLAGS 

2、链接选项:LDFLAGS 

3、依赖       :obj

 

二、顶层Makefile.build无需变动

 

三、子目录Makefile

对 obj += on_pc.o ,加上工具链判断

 

 

这里只附上display中的Makefilie和顶层Makefile代码

display/Makefile

obj += disp_manager.o
obj += fb.o

ifeq ($(CROSS_COMPILE), )
	obj += on_pc.o
endif

 

顶层Makefile

CROSS_COMPILE := arm-linux-

CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld

TOPDIR := $(shell pwd)/

CFLAGS := -Wall -O2 -g
CFLAGS  += -I$(PWD)/include -I/usr/include/freetype2     

LDFLAGS := -lm -lfreetype   

TARGET := built

obj += main.o
obj += draw.o

obj += encoding/
obj += fonts/
obj += display/


ifeq ($(CROSS_COMPILE), )
	CFLAGS  += -I/usr/local/include -D ONPC
	LDFLAGS += -lvga -lvgagl
endif


export CROSS_COMPILE CC LD
export TOPDIR
export CFLAGS
export LDFLAGS




all :
	make -C ./ -f $(TOPDIR)Makefile.build
	$(CC) $(LDFLAGS) -o $(TARGET) built-in.o
	
clean :
	rm -f $(shell find -name "*.o")
	rm -f $(TARGET)
	
distclean :
	rm -f $(shell find -name "*.o")
	rm -f $(TARGET)
	rm -f $(shell find -name "*.d")


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值