Подтвердить что ты не робот

Как создать один make файл для 32- и 64-разрядных?

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

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

4b9b3361

Ответ 1

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

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

include otherfile

С этим вы можете создать файл make86 x86 следующим образом:

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

и файл PowerPC Makefile:

ARCHFLAGS = -mcpu=g3
include common.mk

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

Ответ 3

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

Ответ 4

Один из способов работы:

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

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

Ответ 5

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

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

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