我有一个makefile
,可以在Linux(x86_64
)和OS X Intel(x86_64
)上透明地工作。这使用特定于64位的GCC选项。
是否有一种调整makefile的方法,以便可以为32位和64位OS X PPC(ppc
,ppc64
)进行构建,而不必维护单独的,特定于arch的makefile-也许像可以在构建之前确定体系结构的预处理器指令?
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 ...
尝试包含文件。这不是标准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)
。
我认为,通过使用诸如cmake或GNU autotools之类的构建系统,您将以较少的工作量(和工作量)来实现目标。
一种解决方法是:
posix
,win32
,win32-gcc
等我已经在中小型项目中使用了此功能(几年来有2或3个人从事代码工作,非常适合该法案。
尽管它没有明确回答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
可以解决所有问题。