Linuxで透過的に機能するmakefile
があります(x86_64
)およびOS X Intel(x86_64
)。これは64ビット固有のGCCオプションを使用します。
32ビットおよび64ビットOSX用にビルドできるようにメイクファイルを調整する方法はありますかPPC(ppc
、ppc64
)個別のArch固有のメイクファイルを維持する必要はありません—おそらくビルド前にアーキテクチャを決定できるプリプロセッサディレクティブのようなものですか?
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
_
これにより、次のようなx86Makefileを作成できます。
_ARCHFLAGS = -m64 -mtune=core2
include common.mk
_
およびPowerPCMakefile:
_ARCHFLAGS = -mcpu=g3
include common.mk
_
コンパイルルールの大部分は、必要に応じて$(ARCHFLAGS)
を使用して、1つのファイル(_common.mk
_)にまとめられます。
CmakeやGNU autotools)などのビルドシステムを採用することで、より少ない作業(および苦痛)で目標を達成できると思います。
これを行う1つの方法は、次のとおりです。
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
を実行すると、すべてがうまくいきます。