2

1)z /OSUSSとLinuxプラットフォームの両方でC++をビルドするためにMakefilesが必要です。makefileを共通に保つために、z / OSUSSでgnumakeを使用することをお勧めしますか?

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 
 ]
4

3 に答える 3

3

免責事項:

  1. z / OS USSについては何も知りませんが、
  2. 私はMakeについてたくさん知っています(そしてあなたがハンマーを持っているとき、...)。

助言:

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

    #通常、最初に変数を定義します。
    SYSTEM = $(shell uname)
    
    #次に、他の変数を条件付きで定義できます
    
    SOMEFILE = $(SYSTEM)_file
    
    ifeq($(SYSTEM)、Linux)
    #Linuxで何かをしたり、変数を定義したりします。
    そうしないと
    #いくつかのz /OSUSSのことを行います。
    endif
    
    #コマンドのブロックで、条件付きがタブで始まらない場合、
    #これはMakeステートメントであり、Make構文に従います。
    もの:
    ifeq($(SYSTEM)、Linux)
        shell-command-do-something
    endif
    
    #条件付きがタブの後に続く場合、Makeは変数を展開して渡します
    #すべてをシェルに適用するため、構文はシェルが必要とするものになります。
    別のもの:
        if($(SYSTEM)== ZOS)do_x; それ以外の場合はdo_y; 終了
    

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

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

  • 于 2009-10-08T14:32:21.770 に答える
    3

    ポータブルMakefileが必要な場合は、必ずGNUmakeを使用してください。私はUSSの下で何年も問題なくそれを実行しています。自分で作成することに抵抗がある場合は、ここからコピーを入手できます。

    于 2009-11-25T15:52:35.930 に答える
    1

    Unixシステムサービス(USS)とC / C ++/HLASMを使用してz/OS上にいくつかのアプリケーションを構築しました。makeではなくgmakeを使用する価値があることがわかりました。はい、gmakeをダウンロードして設定する必要がありますが、使いやすく、ポータブルにするのも簡単です。gmakeに加えて、bashも取得することをお勧めします。shを強制的に使用するよりも、bashを使用してUSSと他のプラットフォーム間で移植可能なシェルスクリプトを使用する方が簡単です。gmakeとbashを入手できる場所はおそらくいくつかありますが、私はRocketサイトを使用しました:http ://www.rocketsoftware.com/product-categories/mainframe/bash-zos (そうでない場合は無料です)サポートが必要です)。

    于 2018-06-05T21:44:21.713 に答える