Как мне создать один make-файл для 32- и 64-битных систем? - PullRequest
18 голосов
/ 04 ноября 2010

У меня есть makefile, который прозрачно работает для Linux (x86_64) и OS X Intel (x86_64). Это использует 64-битные опции GCC.

Есть ли способ настроить make-файл так, чтобы я мог собрать для 32-битной и 64-битной OS X PPC (ppc, ppc64) без необходимости поддерживать отдельные, специфичные для арки make-файлы - возможно, что-то вроде директива препроцессора, которая может определять архитектуру перед сборкой?

Ответы [ 5 ]

20 голосов
/ 15 апреля 2011
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 ...
2 голосов
/ 04 ноября 2010

Попробуйте включить файл. Это не является частью стандартного синтаксиса Makefile (тот, что в спецификации Single Unix v3), но широко поддерживается. С GNU make это выглядит так:

include otherfile

С этим вы можете получить x86 Makefile, например:

ARCHFLAGS = -m64 -mtune=core2
include common.mk

и MakePile PowerPC:

ARCHFLAGS = -mcpu=g3
include common.mk

и основная часть ваших правил компиляции будет в одном файле (common.mk), при необходимости используйте $(ARCHFLAGS).

1 голос
/ 03 января 2011

Один из способов это сделать:

  • иметь фрагменты make-файла для каждой архитектуры (возможно, кумулятивные): posix, win32, win32-gcc и т. Д.
  • иметь скрипт, который запускается и определяет, почему фрагменты адекватны хосту
  • включает эти фрагменты make-файла в основной make-файл
  • разрешает ручное переопределение с использованием переменных среды (потому что вещи иногда могут быть сложными, напримерПодумайте о кросс-компиляторах)

Я использовал это в небольших и средних проектах (2 или 3 человека работали над кодом в течение нескольких лет), и это хорошо отвечает всем требованиям.

1 голос
/ 04 ноября 2010

Я думаю, что вы бы достигли своих целей с меньшими затратами труда (и усилий), используя какую-то систему сборки, такую ​​как cmake или GNU autotools.

0 голосов
/ 04 ноября 2010

Посмотрите на это:

http://mad -scientist.net / make / multi-arch.html

Это несколько устарело, но имеет хорошую информациюПолагаю, это может быть полезно для вас.

...