Правильный способ вызова некоторых целей в зависимости от значения переменной среды? - PullRequest
0 голосов
/ 28 октября 2010

Я должен создать несколько пакетов нашего приложения, используя make (в AIX).
Содержимое пакетов должно быть различным в зависимости от одной переменной среды.
Примерно так: если переменная окружения WITH_CPP установлена ​​на "Y" , то часть приложения на c ++ должна быть собрана и упакована в установочный пакет. Если переменная окружения WITH_CPP установлена ​​на "N" , то часть приложения c ++ НЕ должна быть собрана и упакована в установочный пакет.
Как правильно обрабатывать такие условия в make-файлах?

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Предположим, что целью является installation-package, и способ включения частей пакета в c ++ состоит в добавлении объектов c ++ в список объектов для пакета установки:

ifeq ($(WITH_CPP),Y)
  INSTALLATION_OBJECTS += $(CPP_OBJECTS)
endif

Или, есливключить части c ++, создав отдельную цель:

ifeq ($(WITH_CPP),Y)
  installation-package: cpp-part
endif

Это хороший способ сделать это, но это может быть плохо.Если поведение make-файла зависит от переменных среды, то один и тот же make-файл даст разные результаты для разных пользователей, что может быть головной болью.

0 голосов
/ 28 октября 2010

Альтернативный подход заключается в том, чтобы части C ++ вашего пакета зависели от некоторой фальшивой цели:

cxx: cxx-part-1 cxx-part-2
.PHONY: cxx

Затем проверьте (но не зависите) существование различных частей C ++ваш пакет собирается и установите их, если они существуют.Это выполнимо, но действительно плохая идея, потому что граф зависимостей теперь обязательно неполон.Это также означает, что конечный пользователь должен знать, чтобы запустить make && make cxx && sudo make install или аналогичный.Просто используйте autoconf или automake, чтобы отделить этап настройки от этапа сборки.

...