Gnu Make和z / OS USS制作

时间:2009-10-08 02:29:42

标签: mainframe zos gnu-make uss

1)我们需要Makefile在z / OS USS和Linux平台上构建C ++。是否建议在z / OS USS上使用gnu make以保持我们的makefile常见?

2)如果Makefile是常见的,那么Makefile中的一些步骤仍然是以平台为条件的。我们可以通过类似于条件编译的步骤来实现吗?如果是,我们可以请求语法帮助吗?

3)我们的z / OS USS Makefile具有shell脚本或命令组,如下例所示,方括号[]将命令作为一组呈现给shell,而不是一次一行。似乎使用GNU make,我们不得不修改这些命令成为一行,这是一个混乱,嵌套循环是一个问题。有没有更简单的方法来使用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 
 ]

3 个答案:

答案 0 :(得分:3)

免责声明:

  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
    

    当你厌倦这些时,还有其他更高级的技巧可以尝试。

  • 当你说你想要在组中处理命令时,我不确定你是什么意思,但我怀疑你可以通过追加来获得你想要的东西; \该组,以便它们将在同一个子shell中逐个执行(否则每个命令都有自己的子shell)。

  • 答案 1 :(得分:3)

    如果您需要便携式Makefile,请务必使用GNU make。我已经在USS下运行它多年了,没有任何问题。如果您不熟悉自己构建它,可以获得一份from here

    答案 2 :(得分:1)

    我使用Unix系统服务(USS)和C / C ++ / HLASM在z / OS上构建了多个应用程序。 我发现使用gmake而不是make是非常值得。是的,你必须下载gmake并进行设置,但它更容易使用,并且更容易携带。 除了gmake之外,您可能还想获得 bash 。使用bash在USS和其他平台之间安装便携式shell脚本会更容易,而不是强迫自己使用 sh 。 可能有一些地方你可以从中获取gmake和bash,但我已经使用了Rocket网站:http://www.rocketsoftware.com/product-categories/mainframe/bash-zos(如果你不想要支持它是免费的)。