bash和makefile初学者。我有一门课程,我们需要创建一个makefile,每个规则调用一个已经编译的程序。所有编译后的程序都接受一个命令行参数。由于参数可能相当大,并且大多数由一行中相同的字符组成(例如AAAAAAA),我编写了一个脚本,使用python来打印参数。例子:
#!/bin/bash
python -c 'print "A"*1000 + "Q"*200'
我想知道如何在makefile中创建规则,以便将上述脚本的输出作为命令行参数传递。基本上是这样的:
test:
./schoolprogram ./myprogram.sh
所以当执行make test时,/schoolprogram应该以参数1000 A后面跟着200 Q而不是文字字符串"/myprogram.sh".
我不知道为什么你有一个脚本,什么也不做,但调用python
;为什么不直接运行python
呢?
无论如何,这不是一个真正的makefile问题,它主要是一个shell问题。在编写makefile食谱时,最好的方法是在shell提示符下获取您想要运行的命令,然后使用相同的命令(稍微调整一下)并将其放入makefile中。
在shell中,您可以使用$(...)
或反引号(旧的样式)来运行命令并将其替换为该命令的输出。所以你可以运行这个:
$ ./schoolprogram $(./myprogram.sh)
或者更简单:
$ ./schoolprogram $(python -c 'print "A"*1000 + "Q"*200')
现在,当您接受命令并将其放入makefile配方时,您必须记住的是$
字符是特殊的,因此,如果您希望将$
传递给您的命令,您必须通过将其加倍$$
来转义它。所以你会写:
test:
./schoolprogram $$(./myprogram.sh)
或等价:
test:
./schoolprogram $$(python -c 'print "A"*1000 + "Q"*200')