GNU Make e z / OS USS fare
Domanda
1) Abbiamo bisogno di Makefiles di costruire C ++ sia su z / OS USS e una piattaforma Linux. E 'consigliabile usare GNU make su z / OS USS al fine di mantenere i nostri makefiles comune?
2) Se i Makefile sono comuni, poi alcuni passi nel Makefile, sarebbero ancora subordinata alla piattaforma. Possiamo farlo con passaggi che sono simili a compilazione condizionale? Se sì, si prega possiamo ottenere aiuto con la sintassi?
3) La nostra z / OS USS Makefiles ha shell script o gruppi di comandi, come nell'esempio di seguito, con le parentesi quadre [] presentando i comandi alla shell come gruppo, piuttosto che una riga alla volta. Sembra che usando il GNU make, abbiamo dovuto modificare questi comandi per diventare una linea, che è disordinato, e il ciclo annidato era un problema. C'è un modo più semplice per raggruppare comandi utilizzando 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
]
Soluzione
Disclaimer:
- Non so niente di z / OS USS,
- so molto su Marca (e quando si è in possesso di un martello, ...).
Consigli:
# 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 ci sono altri, trucchi più avanzati da provare quando siete annoiati con questi.
Altri suggerimenti
Se avete bisogno di Makefiles portatili, con tutti i mezzi utilizzare GNU make. Ho corso sotto USS ormai da anni senza problemi. Se non si sente a proprio agio costruire da soli, è possibile ottenere aa copia da qui
Ho costruito diverse applicazioni su z / OS che utilizzano UNIX System Services (USS) e C / C ++ / HLASM. Ho trovato è vale la pena per usare gmake piuttosto che fare. Sì, è necessario scaricare gmake e configurarlo, ma è modo più semplice da usare, e il modo più semplice per fare portatile. Oltre a gmake, si potrebbe desiderare di ottenere bash pure. E sta per essere più facile avere gli script di shell portabile tra USS e altre piattaforme usando bash piuttosto che costringere se stessi per usare sh . Probabilmente ci sono alcuni luoghi che si possono ottenere gmake e bash, ma ho usato il sito Rocket: http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (è gratuito se non si desidera il supporto).