Условные разделы в AIX Makefiles - PullRequest
3 голосов
/ 25 августа 2009

Как мне создать make-файл, который работает в AIX, Linux и SunOS и может предоставлять различные параметры компилятора для каждой среды?

У меня есть доступ к переменной окружения, которая описывает ОС, но утилита make AIX не любит ifeq, поэтому я не могу сделать что-то вроде:

ifeq($(OS), AIX)
    CFLAGS = $(CFLAGS) <IBM compiler options>
endif

Ответы [ 2 ]

7 голосов
/ 25 августа 2009

Вы можете использовать такую ​​конструкцию:

CFLAGS_AIX = AIX флаги
CFLAGS_Linux = Флаги Linux
CFLAGS_SunOS = Флаги SunOS
CFLAGS = $(CFLAGS_$(OS))

1 голос
/ 25 августа 2009

Переносимость Makefile напрямую не связана с операционной системой, но связана с реализацией make на рассматриваемой платформе. (Таким образом, существует косвенная связь в том, что реализация make может быть угадана (но НЕ точно) из ОС.) В общем, это сложная проблема, для которой было предложено много решений. Возможно, вы захотите взглянуть на automake, который сгенерирует для вас переносимые файлы сборки. Однако решение automake проблемы установки флагов для разных unixen может не понравиться вам, поскольку решение (в основном) «не делайте этого». Философия заключается не в настройке параметров на основе платформы, а в том, чтобы определить, какие флаги необходимы, основываясь на функциональности, предоставляемой хостом или пользователем во время настройки. Одним из удобных решений на основе autoconf / automake для задачи назначения флагов на основе платформы является наличие отдельного файла для каждой из ваших платформ, который назначает CFLAGS во время настройки, и этот файл должен быть указан в переменной среды CONFIG_SITE пользователя, выполняющего configure , Вы можете назначить CONFIG_SITE в сценарии входа пользователя в зависимости от платформы. (т. е. отодвиньте проблему от настройки / изготовления и в настройку входа в систему) Это делает прозрачным назначение для пользователя, создающего программное обеспечение. (прозрачный, но легко переопределяемый).

...