Makefile 判断 32、64位

今天碰到了编写Makfile时需要区分32位还是64位,起初是直接把另一个项目的include包含过来了。

结果编译正常通过,但是运行时一直报sigseg,一直没有找到原因。后来把代码拿到64位机器上编译后运行正常,这才反应过来include文件有问题。所以这次干脆把32和64位的头文件分开,并且编译的时候通过makefile自动识别。

1.linux中判断32位和64位

办法有很多,下面就列举几个。

  • uname -m (32 i686,64 x86_64)
  • getconf LONG_BIT || getconf WORD_BIT 输出是32则为32.
  • file /bin/ls  包含 ELF 32-bit 则是32位,ELF 64-bit是64位。

2.Makefile 自动判断32位64位

  • ARCH:=$(shell getconf LONG_BIT)

$(ARCH) 通过判断这个值是不是32来判断。

  • ARCH:=$(shell uname -m)
  • BIT32:=i686
    BIT64:=x86_64
    通过判断是不是i686来判断是不是32位。
    ifeq ($(ARCH),$(BIT64))
    @echo x86_64
    make $(SubObject) TARGET=$@
    else
    @echo i686
    endif

我是用下面这种方式引用的。

ARCH:=$(shell getconf LONG_BIT)
#######build flags###########
LIB_SRCS = mod_api.c
INCLUDE_HOME = ../include
INCLUDES = -I$(INCLUDE_HOME) -I $(INCLUDE_HOME)/arc$(RC)

希望有帮助。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>