Makefile设计条件编译

12 篇文章 0 订阅
4 篇文章 0 订阅

在开发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)gcc
	export CXX = $(CROSS)g++
	export LD = $(CROSS)ld
endif

export CCFLAGS = -Werror -g -std=gnu++14 -MMD -fasynchronous-unwind-tables -fPIC -pedantic

ifeq ($(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 ]
then
    echo_build
    ##source #####
    make BUILD_TYPE=1
fi

if [ "-l" == $1 ]
then
    echo_build
    make BUILD_TYPE=0
fi

if [ "-c" == $1 ]
then
    echo_clean
    make clean
fi

Makefile 

## FLAGS used for compiling ###
# local build: 0 cross build: 1
export LOCAL_BUILD=0
export CROSS_BUILD=1
export BUILD_TYPE

ETH_SERVER_NAME = ethServer
ETH_CLIENT_NAME = ethClient

ifeq ($(BUILD_TYPE), $(LOCAL_BUILD))
	export CC = $(CROSS)gcc
	export CXX = $(CROSS)g++
	export LD = $(CROSS)ld
        ETH_SERVER_NAME = ethServerLocal
endif

export CCFLAGS = -Werror -g -std=gnu++14 -MMD -fasynchronous-unwind-tables -fPIC -pedantic

ifeq ($(BUILD_TYPE), $(CROSS_BUILD))
	CCFLAGS += -D CROSS_BUILD
endif
##Local Build

./build.sh -l

##Cross Build

./build.sh -b

##Clean Build
./build.sh -c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenSun-1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值