Gnu Make и z / OS USS делают
Вопрос
1) Нам нужны Makefiles для сборки C ++ как на z / OS USS, так и на платформе Linux.Целесообразно ли использовать gnu make на z / OS USS, чтобы сохранить наши make - файлы общими ?
2) Если Make-файлы являются общими, то некоторые шаги в Make-файлах все равно будут обусловлены платформой.Можем ли мы сделать это с помощью шагов, аналогичных условной компиляции?Если да, можем ли мы, пожалуйста, получить помощь с синтаксисом?
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
]
Решение
Отказ от ответственности:
- Я ничего не знаю о z / OS USS,
- Я много знаю о марке (и когда ты держишь в руках молоток ...).
Совет:
# Usually one defines a variable first. SYSTEM = $(shell uname) # Then one can define other variables conditionally SOMEFILE = $(SYSTEM)_file ifeq ($(SYSTEM), Linux) # Do some Linux things, define variables, whatever. else # Do some z/OS USS things. endif # In a block of commands, if the conditional DOESN'T start with a tab, # it's a Make statement and follows Make syntax. thing: ifeq($(SYSTEM), Linux) shell-command-do-something endif # If the conditional DOES follow a tab, Make expands the variables and passes # the whole thing to the shell, so the syntax is whatever the shell requires. otherthing: if($(SYSTEM)==ZOS) do_x ; otherwise do_y ; finish
И есть другие, более продвинутые трюки, которые можно попробовать, когда они вам наскучат.
Другие советы
Если у вас есть потребность в переносимых Makefiles, обязательно используйте GNU make.Я запускаю его под управлением USS уже много лет без каких-либо проблем.Если вам неудобно создавать его самостоятельно, вы можете получить копию отсюда
Я создал несколько приложений на z / OS, используя системные службы Unix (USS) и C / C ++ / HLASM.Я обнаружил, что это оно того стоит использовать gmake, а не make.Да, вам нужно загрузить gmake и настроить его, но он намного проще в использовании и намного проще сделать переносимым.В дополнение к gmake, вы можете захотеть получить удар также.Будет проще иметь переносимые сценарии оболочки между USS и другими платформами, использующими bash, вместо того, чтобы заставлять себя использовать ш.Вероятно, есть несколько мест, где вы можете получить gmake и bash, но я использовал сайт Rocket: http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (это бесплатно, если вам не нужна поддержка).