Gnu Fabrikat und z / OS USS make
Frage
1) Wir haben einen Bedarf für Makefiles C ++ zu bauen sowohl auf z / OS USS und eine Linux-Plattform. Ist es ratsam, auf z / OS USS machen zu verwenden, um Gnu unsere Makefiles gemeinsam zu halten?
2) Wenn die Makefiles gemeinsam sind, dann einige Schritte in den Makefiles, würde diese noch bedingt sein, um die Plattform. Können wir, dass durch die Schritte tun, die bedingte Kompilierung ähnlich sind? Wenn ja, können wir bitte die Hilfe bei der Syntax bekommen?
3) Unsere z / OS USS Makefiles haben Shell-Skripten oder Gruppen von Befehlen, wie im Beispiel unten, mit den eckigen Klammern [] als Gruppe die Befehle an die Shell präsentiert, eher als eine Zeile zu einem Zeitpunkt. Es scheint, dass das GNU make verwenden wir diese Befehle zu ändern, hatten eine Zeile zu werden, was unordentlich ist, und die verschachtelte Schleife war ein Problem. Gibt es einen einfacheren Weg, um Gruppenbefehle mit 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
]
Lösung
Haftungsausschluss:
- Ich weiß nichts über z / OS USS,
- Ich weiß viel über Make (und wenn Sie mit einem Hammer, ...).
Hinweis:
# 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
Und es gibt andere, fortschrittlichere Tricks zu versuchen, wenn Sie mit diesen langweilig ist.
Andere Tipps
Wenn Sie eine Notwendigkeit für portable Makefiles haben, mit allen Mitteln verwendet GNU make. Ich habe es unter USS läuft seit Jahren ohne Probleme. Wenn Sie es selbst nicht wohl Gebäude fühlen, können Sie aa Kopie von hier
habe ich mehrere Anwendungen auf z / OS mit Unix System Services (USS) und C / C ++ / HLASM gebaut. Ich habe festgestellt, es ist lohnt sich eher verwenden gmake als machen. Ja, Sie haben zum Download gmake und richtete ihn auf, aber es ist viel einfacher zu bedienen und so leichter zu tragbar machen. Neben gmake, können Sie bash als auch zu bekommen. Es wird leichter sein, tragbare Shell-Skripten zwischen USS und anderen Plattformen haben bash verwenden, anstatt sich zwingen zu verwenden sh . Es gibt wahrscheinlich ein paar Orte, die Sie gmake und bash von bekommen, aber ich habe die Rakete Website verwendet: http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (es ist kostenlos, wenn Sie nicht Unterstützung wollen).