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

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

扫描二维码关注公众号,回复: 8912203 查看本文章

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")


发布了71 篇原创文章 · 获赞 4 · 访问量 7225

猜你喜欢

转载自blog.csdn.net/floatinglong/article/details/86674763