Gnu Marque et z / OS USS faire
Question
1) Nous avons besoin de Makefile pour construire C ++ sur les deux z / OS USS et une plate-forme Linux. Est-il conseillé d'utiliser gnu faire sur z / OS USS afin de garder nos makefiles commun?
2) Si les Makefiles sont communs, puis quelques étapes du Makefile, seraient toujours conditionnelle à la plate-forme. Peut-on faire par étapes qui sont semblables à la compilation conditionnelle? Si oui, pouvons-nous s'il vous plaît obtenir de l'aide avec la syntaxe?
3) Notre z / OS USS Makefiles ont des scripts shell ou des groupes de commandes, comme dans l'exemple ci-dessous, avec les crochets [] présentant les commandes à l'enveloppe en tant que groupe, au lieu d'une ligne à la fois. Il semble que l'utilisation de la GNU make, nous avons dû modifier ces commandes pour devenir une ligne, ce qui est en désordre, et la boucle imbriquée était un problème. Y at-il un moyen plus facile de regrouper les commandes à l'aide 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
]
La solution
Avertissements:
- Je ne sais rien de z / OS USS,
- Je sais beaucoup de choses sur Make (et quand vous tenez un marteau, ...).
Conseil:
# 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
Et il y a d'autres trucs plus avancés pour essayer quand vous vous ennuyez avec ces derniers.
Autres conseils
Si vous avez besoin de Makefile portables, par tous les moyens d'utiliser GNU make. J'ai fonctionner en USS depuis des années sans aucun problème. Si vous ne vous sentez pas à l'aise construire vous-même, vous pouvez obtenir aa copie d'ici
Je l'ai construit plusieurs applications sur z / OS utilisant Unix System Services (USS) et C / C ++ / HLASM. Je l'ai trouvé est valent la peine à utiliser gmake plutôt que de faire. Oui, vous devez télécharger gmake et le mettre en place, mais il est beaucoup plus facile à utiliser et plus facile à faire portable. En plus de gmake, vous pouvez obtenir bash aussi bien. Il va être plus facile d'avoir des scripts shell portables entre USS et d'autres plates-formes en utilisant bash plutôt que de vous forcer à utiliser sh . Il y a probablement quelques endroits que vous pouvez obtenir gmake et bash de, mais j'ai utilisé le site Rocket: http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (c'est gratuit si vous ne voulez pas du support).