Comment créer un makefile unique pour les fichiers 32 et 64 bits?
j'ai un makefile
cela fonctionne de manière transparente pour Linux (x86_64
) et OS X Intel (x86_64
). Cela utilise des options spécifiques à 64 bits de GCC.
y a-t-il un moyen d'ajuster le makefile pour que je puisse construire pour 32 bits et 64 bits OS X PPC (ppc
,ppc64
) sans avoir à maintenir des makefiles séparés, spécifiques à l'arche - peut-être quelque chose comme une directive pré-processeur qui peut déterminer l'architecture avant de construire?
5 réponses
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 ...
essayez l'inclusion des fichiers. Cela ne fait pas partie de la syntaxe standard du Makefile (celle de la spécification Unix V3) mais est largement supporté. Avec GNU make, cela ressemble à ceci:
include otherfile
avec ceci, vous pouvez avoir un Makefile x86 comme ceci:
ARCHFLAGS = -m64 -mtune=core2
include common.mk
et un Makefile PowerPC:
ARCHFLAGS = -mcpu=g3
include common.mk
et la majeure partie de vos règles de compilation sera dans un fichier (common.mk
), à l'aide de $(ARCHFLAGS)
si nécessaire.
je pense que vous atteindriez vos objectifs avec moins de travail (et de peine) en employant une sorte de système de construction comme les autotools cmake ou GNU.
Une façon de travailler est la suivante:
- makefile fragments pour chaque architecture (éventuellement cumulatifs):
posix
,win32
,win32-gcc
, etc. - avoir un script qui s'exécute et détermine pourquoi fragments sont adéquates pour l'accueil
- inclure ceux makefile fragments dans le makefile
- autoriser le contournement manuel en utilisant des variables d'environnement (parce que les choses peuvent parfois être compliquées; par exemple, pensez à croix-des compilateurs)
Je l'ai utilisé dans des projets de petite à moyenne taille (2 ou 3 personnes travaillant sur le code depuis quelques années), et il convient bien à la note.
jetez un oeil à ceci:
http://mad-scientist.net/make/multi-arch.html
il est quelque peu désuet, mais il a de bonnes informations qui pourraient vous être utiles, je suppose.