Ответ 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 ...
У меня есть makefile
, который работает прозрачно для Linux (x86_64
) и OS X Intel (x86_64
). Это использует 64-битные специфические параметры GCC.
Есть ли способ настроить make файл, чтобы я мог создавать для 32-битной и 64-разрядной OS X PPC (ppc
, ppc64
) без необходимости поддерживать отдельные, специфичные для арки make файлы - возможно, что-то вроде предпроцессорную директиву, которая может определить архитектуру перед построением?
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
С этим вы можете создать файл make86 x86 следующим образом:
ARCHFLAGS = -m64 -mtune=core2
include common.mk
и файл PowerPC Makefile:
ARCHFLAGS = -mcpu=g3
include common.mk
и основная часть ваших правил компиляции будет находиться в одном файле (common.mk
), при необходимости используя $(ARCHFLAGS)
.
Я думаю, что вы достигнете своих целей с меньшим количеством работы (и болью), используя какую-то систему сборки, такую как cmake или GNU autotools.
Один из способов работы:
posix
, win32
, win32-gcc
и т.д.Я использовал это в проектах малого и среднего размера (2 или 3 человека, работающие над кодом в течение нескольких лет), и он хорошо подходит для законопроекта.
Посмотрите на это:
http://mad-scientist.net/make/multi-arch.html
Он несколько устарел, но имеет хорошую информацию, которая может быть полезной для вас. Я полагаю.