18

我有一个makefile对 Linux ( x86_64) 和 OS X Intel ( x86_64) 透明的工作。这使用 64 位特定的 GCC 选项。

有没有办法调整 makefile 以便我可以为 32 位和 64 位 OS X PPC ( ppc, ppc64) 构建而无需维护单独的、特定于架构的 makefile — 可能类似于可以确定的预处理器指令建造前的建筑?

4

6 回答 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 ...
于 2011-04-15T15:50:51.990 回答
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)在必要时使用。

于 2010-11-04T12:48:11.380 回答
1

我认为您可以通过使用某种构建系统(例如 cmake 或 GNU autotools)以更少的工作(和痛苦)实现您的目标。

于 2010-11-04T11:44:26.403 回答
1

一种方法是:

  • 每个架构都有 makefile 片段(可能是累积的):posix、、、win32等等win32-gcc
  • 有一个脚本可以运行并确定为什么片段对于主机来说是足够的
  • 将这些 makefile 片段包含到主 makefile
  • 允许使用环境变量手动覆盖(因为有时事情可能很复杂;例如,考虑交叉编译器)

我已经在中小型项目中使用了它(2 或 3 个人从事代码工作几年),它非常符合要求。

于 2011-01-03T17:59:01.303 回答
0

看看这个:

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

它有点过时了,但我想它有很好的信息可能对你有用。

于 2010-11-04T12:59:52.510 回答
0

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

生成文件

# -----------------------------------------
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.s和添加helloworld-64.s到项目文件夹中,通过在文件夹中运行一切正常make

于 2019-11-30T20:35:45.137 回答