Linux学习笔记(四)Makefile同时编译linux上下位机文件的方法

说明

	嵌入式端运行的程序,时常需要同时编译一份上位机的版本,供后续调试。Makefile中可以方便的通过如下代码
FLAG LINUXFLAG
		#ifdef FLAG
		//编译LINUX版本工程
		#else
		//编译ARM版本工程
		#endif
	的方式,采用不同的编译器和库文件,分别编译针对上位机和Linux版本的程序。
	同时,可以在Makefile中通过-DMYVAL的方式(相当于所有文件中均添加了#define MYVAL),之后在对应的文件中,定义类似如下的代码,即可实现利用上下位机编译相同的代码,只需修改Makefile开头定义的变量,即可编译上下位机同时运行的文件。
#ifdef T3BOARD
		ofstream boxout("result_ARM.txt");
	#else
		ofstream boxout("result_linux.txt");
	#endif

Makefile实例

#set targetname
target:=mydemo

#set cross compile flag
#TG=x86

ifeq ($(TG),x86)
	DEFINES = -DAT_LINUX
else
	DEFINES = -DT3BOARD -mfpu=neon
endif

#set base path
LICHEE_DIR=/home/jerry/workspace/t7linux-auto/

#set SRCS and OBJS
SRCS := $(wildcard ./src/*.cpp)
OBJS := $(patsubst %cpp,%o,$(SRCS)) 

CFLAGS = -g -Wall
CFLAGS += -I.
CFLAGS += -I./inc
CFLAGS += -I./rapidxml-1.13

ifeq ($(TG),x86)
	CXX = g++
	LIBS :=-L/usr/local/lib
else
	CXX = $(LICHEE_DIR)out/sun8iw17p1/linux/common/buildroot/host/opt/ext-toolchain/bin/arm-linux-gnueabi-g++
	LIBS :=-L/home/jerry/opencv_arm_lib/lib
	CFLAGS += -I/home/jerry/opencv_arm_lib/include/opencv/
	CFLAGS += -I/home/jerry/opencv_arm_lib/include/
endif

LIBS +=-lopencv_calib3d		-lopencv_imgproc	-lopencv_video
LIBS +=-lopencv_core		-lopencv_ml
LIBS +=-lopencv_features2d	-lopencv_objdetect	-lopencv_videoio
LIBS +=-lopencv_flann		-lopencv_imgcodecs
LIBS +=-lopencv_highgui

${target}: $(OBJS)
	${CXX} -o $@ $^ ${CFLAGS} ${LIBS}  

#this line should add -mfpu = neon when compile in arm-ruT7
%.o:%.cpp
ifeq ($(TG),x86)
	${CXX} -c -o $@ $< ${CFLAGS} ${DEFINES}
else
	${CXX} -c -o $@ $< ${CFLAGS} ${DEFINES}
endif

clean:
	rm -f ./src/*.o ${target}

如上makefile中,注释掉TG = x86,则编译上位机代码;打开,则编译下位机代码。

补充一下,可以将TG=x86始终注释掉,改用如下脚本实现编译:

APPDIR=$PWD

make clean
make TG=$1 -f Makefile  -j

假设脚本名称为mk,则./mk x86执行编译上位机的代码,./mk ARM执行编译下位机的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值