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

Architecture 如何为32位和64位创建单个makefile?,architecture,gcc,makefile,powerpc,Architecture,Gcc,Makefile,Powerpc,我有一个makefile,它在Linux(x86_64)和OS X Intel(x86_64)上透明地工作。这使用64位特定的GCC选项 是否有一种方法可以调整makefile,以便我可以为32位和64位OS X PPC(PPC,ppc64)构建,而无需单独维护,特定于arch的makefiles—可能类似于预处理器指令,可以在构建之前确定体系结构?我认为,通过使用某种构建系统,如cmake或GNU autotools,您可以以较少的工作量(和痛苦)实现目标。尝试文件包含。这不是标准Makefi

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


是否有一种方法可以调整makefile,以便我可以为32位和64位OS X PPC(
PPC
ppc64
)构建,而无需单独维护,特定于arch的makefiles—可能类似于预处理器指令,可以在构建之前确定体系结构?

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

尝试文件包含。这不是标准Makefile语法的一部分(单个unixv3规范中的语法),但得到广泛支持。使用GNU make时,如下所示:

include otherfile
ARCHFLAGS = -m64 -mtune=core2
include common.mk
这样,您就可以拥有如下x86 Makefile:

include otherfile
ARCHFLAGS = -m64 -mtune=core2
include common.mk
以及PowerPC生成文件:

ARCHFLAGS = -mcpu=g3
include common.mk
您的大部分编译规则将放在一个文件中(
common.mk
),必要时使用
$(ARCHFLAGS)

请查看以下内容:


它有点过时,但我想它提供了一些有用的信息。

一种方法是:

  • 每个体系结构都有makefile片段(可能是累积的):
    posix
    win32
    win32 gcc
    ,等等
  • 有一个脚本可以运行并确定为什么片段适合主机
  • 将这些makefile片段包括到主makefile中
  • 允许使用环境变量进行手动重写(因为有时事情会很复杂;例如,考虑交叉编译器)

我在中小型项目中使用过这个方法(两三个人在代码上工作了几年),它非常适合这个要求。

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

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 ...
生成文件
#-----------------------------------------
PROJECT=helloworld
#预期的源文件:*-32.s和*-64.s
# -----------------------------------------
位:=$(shell getconf长\u位)
OBJS=$(项目).o
ifdef调试
DEBUGFLGS=-g
其他的
调试=
恩迪夫
%.o:%-$(位).s
as$(调试FLGS)-o$@$<
$(项目):$(OBJS)
ld-o bin/$(项目)$(OBJS)

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

我会说,如果您的项目很小,并且在不同的平台上没有太多的库依赖关系,那么请远离自动工具,因为它会让您感到痛苦维持。如果它是一个小的(ish)项目,并且你知道tragets会是什么样子,那么你可以使用一些调整过的makefiles。我想说,即使你的项目很小,也可以使用autotools。它比CMake和现代汽车好得多,有着
AM\u SILENT\u规则
看起来几乎一样好。该死的?不完全是。嗯,计算机程序的可用性一直是旁观者的眼中钉:-)还有一个选择,它有一个相当温和的学习曲线:tmake来自Trolltech。不受支持但有效。比其他方法简单得多。我将此方法用于必须在5种不同Unix变体上构建的代码库。这非常有用。有很多不同的标准和相对较少的操作系统似乎完全符合每一个。。。您是否必须阅读每个目标操作系统的标准和法规遵从性信息,或者是否有更简单的方法来确定哪些系统支持每个功能?我在自动依赖项生成方面做得很好,但这取决于“包含”,我认为这是普遍支持的。-1,没有回答问题(如何将pcc区分为x86),如果有人知道如何在没有MSYS的MinGW(Windows)下实现这一点,在这里发表评论并标记我。只需添加:在某些项目中,
/configure
步骤会在类似的行中执行一些操作。