makefile 编写之32 or 64位机器

一.Makefile 判断 64位机器


ARCH:=$(shell uname -m)

BIT32:=i686
BIT64:=x86_64

all clean:
ifeq ($(ARCH),$(BIT64))
        @echo x86_64
        make $(SubObject) TARGET=$@
else
        @echo i686
endif

#需要注意的是,ARCH如果写成`uname -m`的话匹配会失败,原因不明。

二.使用makefile区分32位,64位机器

近期在做32位程序移植到64位环境下的工作,为了使32位和64位系统下编译程序使用一个makefile,需要条件编译,找到了两种方法。下面的两种方法以使用linux的mysql为例。
 
方法1:使用变量决定使用到库的路径,如下所示:
LINUX_VERSION=64
    ifeq ($(LINUX_VERSION),64)
        LIB= -L/usr/lib64/mysql
    else
        LIB=-L/usr/lib/mysql
    endif
$(EXEC):$(OBJS)
    g++ -Wall -I. -L. $(LIB) -o $@ $^ -lpthread -lstdc++ -lmysqlclient
当把LINUX_VERSION设置为64时,在64位下编译,使用/usr/lib64/mysql路径的mysql库,当把LINUX_VERSION设置为32时,在32位下编译,使用/usr/lib/mysql路径的mysql库。
 
方法2:通过makefile的命令行参数决定编译环境。如下例,通过添加了V变量,命令行参数给V赋值,在makefile中使用变量V判断使用库的路径。
    ifeq ($(V),64)
    LIB= -L/usr/lib64/mysql
else
    LIB=-L/usr/lib/mysql
endif
$(EXEC):$(OBJS)
g++ -Wall -I. -L. $(LIB) -o $@ $^ -lpthread -lstdc++ -lmysqlclient
使用如下:
    命令行输入:makefile V=64           // 表示在64位平台上编译,
    命令行输入:makefile                // 无参数表示在32位平台上编译
    同样在linux和arm交叉编译环境中编译使用上述方法很用,如:
ifeq ($("这里是自己定义的变量"),ARM)
    CC=arm_linux_gcc
else
    CC=gcc
endif
方法1是通过手动修改makefile实现,方法2通过命令行传参实现。在makefile里可以自动检测出当前环境是32还是64位,有待进一步研究。


-----------------------------------------------------------------------------------------

第一步:

在Makefile中加入如下代码:

VERSION_SIGN = -D__VERSION_ID__="\"1.2.52.0\""

ifeq ($(MAC), 64)
        ULLIB = ../../../lib2-64/ullib
        DICT  = ../../../lib2-64/dict
        CCODE = ../../../lib2-64/ccode
        BSL = ../../../lib2-64/bsl
        JSONC = ../../../third-64/json-c
else
        ULLIB = ../../../lib2/ullib
        DICT  = ../../../lib2/dict
        CCODE = ../../../lib2/ccode
        BSL = ../../../lib2/bsl
        JSONC = ../../../third/json-c
endif

 

第二步:

加入以上代码完毕后,在/.bash_profile中的PATH环境变量中:在/usr/bin路径前,加入一个新的路径(完全自定义可以,比如:/home/work/bin)

第三步:

在/home/work/bin 目录下,新建一个make文件:

文件内加入:

#!/bin/bash
MAKE="/usr/bin/make MAC=64"
TMP=$MAKE

while  [ "$#" -ne "0" ]
do
        TMP2=`echo $1 |tr -d " "`
        MAKE="$TMP $TMP2"
        TMP=$MAKE
        shift
done

echo $MAKE   
$MAKE

完毕后,chmod +x make

第四步:

source ~/.bash_profile

第五步:

现在执行 which make,看看情况哈....

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值