Gnu Make и z/OS USS make
1) Нам нужны Makefiles для сборки C++ как на z/OS USS, так и на платформе Linux. Желательно ли использовать gnu make в z/OS USS, чтобы наши сборочные файлы были распространены?
2) Если файлы Makefile являются общими, то некоторые шаги в файлах Makefile все равно будут относиться к платформе. Можем ли мы сделать это с помощью шагов, похожих на условную компиляцию? Если да, можем ли мы получить помощь с синтаксисом?
3) Наши Make-файлы z/OS USS имеют сценарии оболочки или группы команд, как в примере ниже, с квадратными скобками [], представляющими команды для оболочки в виде группы, а не по одной строке за раз. Кажется, что с помощью GNU make нам пришлось изменить эти команды, чтобы они стали одной строкой, что беспорядочно, и вложенный цикл был проблемой. Есть ли более простой способ группировать команды, используя gmake?
[
dirs=$(targets)
rc=0
for dir in $$dirs
do
cd $$dir/src
make -r
rc=$$?
if [ $$rc != 0 ]; then
echo "build failed for directory:" $$dir:
break;
fi
cd ../..
done
echo "return code from make = " $$rc
]
3 ответа
Отказ от ответственности:
- Я ничего не знаю о z/OS USS,
- Я много знаю о Маке (и когда ты держишь молоток, ...).
Совет:
# Обычно сначала определяют переменную. SYSTEM = $(shell uname) # Тогда можно определить другие переменные условно SOMEFILE = $(SYSTEM)_file ifeq ($(SYSTEM), Linux) # Делайте некоторые вещи в Linux, определяйте переменные, что угодно. еще # Делайте некоторые вещи из z / OS USS. ENDIF # В блоке команд, если условное НЕ начинается с вкладки, # это оператор Make и следует синтаксису Make. вещь: ifeq($(SYSTEM), Linux) оболочки командной сделай что-то ENDIF # Если условный элемент следует за вкладкой, Make расширяет переменные и передает # все это относится к оболочке, поэтому синтаксис - это то, что требуется оболочке. Другая вещь: if($(SYSTEM)==ZOS) do_x; в противном случае do_y; Конец
И есть другие, более продвинутые трюки, чтобы попробовать, когда вам это надоело.
Если вам нужны переносимые файлы Makefile, обязательно используйте GNU make. Я запускаю его под USS уже много лет без проблем. Если вам неудобно создавать его самостоятельно, вы можете получить копию здесь.
Я создал несколько приложений для z/OS, используя Unix System Services (USS) и C/C++/HLASM. Я обнаружил, что стоит использовать gmake, а не make. Да, вам нужно скачать gmake и настроить его, но это намного проще в использовании и намного проще в переносимости. В дополнение к gmake, вы можете также получить bash. Будет проще иметь переносимые сценарии оболочки между USS и другими платформами, использующими bash, чем заставлять себя использовать sh. Вероятно, есть несколько мест, где вы можете получить gmake и bash, но я использовал сайт Rocket: http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (это бесплатно, если вы этого не сделаете хочу поддержки).