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