我如何为32位和64位都创建单个makefile?

问题描述 投票:18回答:6

我有一个makefile,可以在Linux(x86_64)和OS X Intel(x86_64)上透明地工作。这使用特定于64位的GCC选项。

是否有一种调整makefile的方法,以便可以为32位和64位OS X PPC(ppcppc64)进行构建,而不必维护单独的,特定于arch的makefile-也许像可以在构建之前确定体系结构的预处理器指令?

architecture gcc makefile powerpc
6个回答
20
投票
ARCH := $(shell getconf LONG_BIT)

CPP_FLAGS_32 := -D32_BIT ...  Some 32 specific compiler flags ...
CPP_FLAGS_64 := -D64_BIT

CPP_FLAGS := $(CPP_FLAGS_$(ARCH))  ... all the other flags ...

2
投票

尝试包含文件。这不是标准Makefile语法(Single Unix v3规范中的语法)的一部分,但得到了广泛的支持。使用GNU make,看起来像这样:

include otherfile

有了这个,您可能会有一个x86 Makefile像这样:

ARCHFLAGS = -m64 -mtune=core2
include common.mk

和PowerPC Makefile:

ARCHFLAGS = -mcpu=g3
include common.mk

并且大部分编译规则将在一个文件(common.mk)中,并在必要时使用$(ARCHFLAGS)


1
投票

我认为,通过使用诸如cmake或GNU autotools之类的构建系统,您将以较少的工作量(和工作量)来实现目标。


1
投票

一种解决方法是:

  • 具有每种体系结构的makefile片段(可能是累积的):posixwin32win32-gcc
  • 具有运行并确定为什么片段足以容纳主机的脚本
  • 将那些makefile片段包括到主makefile中
  • 允许使用环境变量进行手动覆盖(因为有时候情况可能会很复杂;例如,考虑交叉编译器)

我已经在中小型项目中使用了此功能(几年来有2或3个人从事代码工作,非常适合该法案。


0
投票

看看这个:

http://mad-scientist.net/make/multi-arch.html

我想它有些过时,但是有很好的信息,可能对您有用。


0
投票

尽管它没有明确回答CPP编译,但我刚刚为汇编语言创建的此方法可以很容易地适应它。

makefile

# -----------------------------------------
PROJECT = helloworld
# Expected source files: *-32.s and *-64.s
# -----------------------------------------
BITS := $(shell getconf LONG_BIT)
OBJS = $(PROJECT).o
ifdef DEBUG
    DEBUGFLGS = -g
else
    DEBUGFLGS =
endif

%.o : %-$(BITS).s
    as $(DEBUGFLGS) -o $@   $<

$(PROJECT): $(OBJS)
    ld  -o bin/$(PROJECT)   $(OBJS)

然后我将helloworld-32.shelloworld-64.s添加到项目文件夹,并且通过运行文件夹中的make可以解决所有问题。

© www.soinside.com 2019 - 2024. All rights reserved.