Gnu Make および z/OS USS make
質問
1) z/OS USS と Linux プラットフォームの両方で C++ をビルドするには Makefile が必要です。makefile を共通に保つために、z/OS USS で gnu make を使用することをお勧めしますか?
2) Makefile が共通である場合、Makefile 内の一部のステップは依然としてプラットフォームに条件付きです。条件付きコンパイルと同じような手順で実行できますか?「はい」の場合、構文についてサポートしてもらえますか?
3) z/OS USS Makefile には、以下の例のように、シェル スクリプトまたはコマンドのグループが含まれています。角括弧 [] は、コマンドを一度に 1 行ずつではなく、グループとしてシェルに提示します。GNU make を使用すると、これらのコマンドを 1 行になるように変更する必要があったようですが、これは煩雑で、ネストされたループが問題でした。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 については何も知りません。
- 私は Make についてよく知っています (ハンマーを持っているときのことも…)。
アドバイス:
# 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
これらに飽きたときに試してほしい、より高度なトリックが他にもあります。
他のヒント
、すべての手段によって、GNU makeを使用。私は何の問題もなく、今年のためUSSの下でそれを実行してきました。あなたはそれを自分で構築する自信がない場合は、AAのコピー<のhref =「http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#gmake」のrelを得ることができます= "nofollowをnoreferrer">ここをから
Unix System Services (USS) と C/C++/HLASM を使用して、z/OS 上にいくつかのアプリケーションを構築しました。であることがわかりました それだけの価値は十分にあります make ではなく gmake を使用します。はい、gmake をダウンロードして設定する必要がありますが、gmake の方が使いやすく、移植も簡単です。gmake に加えて、次のものも入手できます。 バッシュ 同じように。bash を使用すると、無理にシェル スクリプトを使用するよりも、USS と他のプラットフォーム間でポータブル シェル スクリプトを使用する方が簡単になります。 しー. 。gmake と bash を入手できる場所はおそらくいくつかありますが、私は Rocket サイトを使用しました。 http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (サポートが不要な場合は無料です)。