Условные разделы в файлах Makefile AIX


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

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

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

2 ответа:

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

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

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