Gnu Make e z/OS USS make
Pergunta
1) Precisamos de Makefiles para construir C++ no z/OS USS e em uma plataforma Linux.É aconselhável usar o gnu make no z/OS USS para manter nossos makefiles comuns?
2) Se os Makefiles forem comuns, então algumas etapas nos Makefiles ainda seriam condicionais à plataforma.Podemos fazer isso seguindo etapas semelhantes à compilação condicional?Se sim, podemos obter ajuda com a sintaxe?
3) Nossos Makefiles USS do z/OS possuem scripts de shell ou grupos de comandos, como no exemplo abaixo, com colchetes [] apresentando os comandos para o shell como um grupo, em vez de uma linha por vez.Parece que usando o make GNU, tivemos que modificar esses comandos para se tornarem uma linha, o que é confuso, e o loop aninhado era um problema.Existe uma maneira mais fácil de agrupar comandos usando o 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
]
Solução
Isenções de responsabilidade:
- Não sei nada sobre z/OS USS,
- Conheço muito sobre Make (e quando você está segurando um martelo,...).
Conselho:
# 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
E há outros truques mais avançados que você pode tentar quando estiver entediado com eles.
Outras dicas
Se você precisar de falhas portáteis, use o GNU Make. Estou executando -o sob o USS há anos, sem problemas. Se você não se sentir confortável construindo você mesmo, pode obter uma cópia de AA daqui
Eu criei várias aplicações no z/OS usando o Unix System Services (USS) e C/C ++/HLASM. Eu descobri que é Vale a pena para usar o gmake em vez de fazer. Sim, você precisa baixar o Gmake e configurá -lo, mas é muito mais fácil de usar e muito mais fácil de tornar portátil. Além de Gmake, você pode querer obter Bash também. Vai ser mais fácil ter scripts de shell portáteis entre o USS e outras plataformas usando o Bash, em vez de forçar -se a usar sh. Provavelmente, existem alguns lugares em que você pode obter, mas eu usei o site do foguete: http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (É gratuito se você não quiser suporte).