Makefile设计条件编译

在开发TCP Server和TCP Client通信功能的项目中,因为ARM板上面跑Client,需要交叉编译。而Ubuntu上面跑Server,需要本地编译。并且Server和Client需要进行条件编译。所以使用Makefile做区分,这样就不用总是修改项目代码了。提高了工作效率。

Makefile

# local build: 0 cross build: 1
LOCAL_BUILD := 0
CROSS_BUILD := 1
BUILD_TYPE := $(LOCAL_BUILD) ###编译前选择交叉编译还是本地编译ifeq ($(BUILD_TYPE), $(LOCAL_BUILD))export CC = $(CROSS)gccexport CXX = $(CROSS)g++export LD = $(CROSS)ld
endifexport CCFLAGS = -Werror -g -std=gnu++14 -MMD -fasynchronous-unwind-tables -fPIC -pedanticifeq ($(BUILD_TYPE), $(CROSS_BUILD))CCFLAGS += -D CROSS_BUILD  ###如果是交叉编译,向源文件添加交叉编译宏定义
endif

 在编译源文件的时候就可以进行条件编译。

 实验效果:

也可以使用脚本进行条件编译,不需要每次改动脚本。

build.sh 

#!/bin/bash
#MY_SCRIPT_VERSION="0.1.0"MAKE_COMMAND="make"
MAKE_COMMAND_PARAM="VERBOSE=1"#####################################################################################################################################################
# set default values (can be configured from command line)
#####################################################################################################################################################function echo_build(){echo "#################################"echo "# Build Project Ethernet Router #"echo "#################################"echo ""
}function echo_clean(){echo "#################################"echo "# Clean Project Ethernet Router #"echo "#################################"echo ""
}if [ "-b" == $1 ]
thenecho_build##source #####make BUILD_TYPE=1
fiif [ "-l" == $1 ]
thenecho_buildmake BUILD_TYPE=0
fiif [ "-c" == $1 ]
thenecho_cleanmake clean
fi

Makefile 

## FLAGS used for compiling ###
# local build: 0 cross build: 1
export LOCAL_BUILD=0
export CROSS_BUILD=1
export BUILD_TYPEETH_SERVER_NAME = ethServer
ETH_CLIENT_NAME = ethClientifeq ($(BUILD_TYPE), $(LOCAL_BUILD))export CC = $(CROSS)gccexport CXX = $(CROSS)g++export LD = $(CROSS)ldETH_SERVER_NAME = ethServerLocal
endifexport CCFLAGS = -Werror -g -std=gnu++14 -MMD -fasynchronous-unwind-tables -fPIC -pedanticifeq ($(BUILD_TYPE), $(CROSS_BUILD))CCFLAGS += -D CROSS_BUILD
endif
##Local Build./build.sh -l##Cross Build./build.sh -b##Clean Build
./build.sh -c


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部