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?

18
demandé sur Ryan P 2010-11-04 14:29:36

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 ...
20
répondu dancl 2011-04-15 15:50:51

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.

2
répondu Thomas Pornin 2010-11-04 12:48:11

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.

1
répondu ssegvic 2010-11-04 11:44:26

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.

1
répondu 2011-01-03 17:59:01

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.

0
répondu gilligan 2010-11-04 12:59:52