質問

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 
 ]
役に立ちましたか?

解決

免責事項:

  1. z/OS USS については何も知りません。
  2. 私は Make についてよく知っています (ハンマーを持っているときのことも…)。

アドバイス:

  • はい、両方のプラットフォームで GNUMake を使用し、Makefile をできるだけ共通にすることをお勧めします。
  • Makefile に条件を設定するには、いくつかの方法があります。

    # 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
    

    これらに飽きたときに試してほしい、より高度なトリックが他にもあります。

  • コマンドをグループで処理したいと言っているのが何を意味するのかわかりませんが、グループ内の各コマンドに ;\ を追加して、1 つずつ実行することで目的の結果を得ることができるのではないかと思います。 1 つは同じサブシェル内にあります (それ以外の場合、各コマンドは独自のサブシェルを取得します)。

  • 他のヒント

    あなたはポータブルのMakefileの必要性を持っている場合は、

    、すべての手段によって、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 (サポートが不要な場合は無料です)。

    ライセンス: CC-BY-SA帰属
    所属していません StackOverflow
    scroll top