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
]
答案 0 :(得分:3)
免责声明:
建议:
# 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 :(得分: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(如果你不想要支持它是免费的)。