不幸的是,在一些旧的 FreeBSD 环境中我无法使用“gmake”,所以我需要编写一个也可以与 FreeBSD make 一起使用的 Makefile。最后一个问题我无法解决 - 使用 shell 命令,例如,我需要获取 Python 可执行文件的完整路径:
PYTHON := $(shell which python2.7 || which python)
但 FreeBSD make 完全忽略了这一点。
test:
echo == $(PYTHON) ==
然后我运行 make test:
$ make test
echo == ==
== ==
有人可以帮忙吗?
更新#1:对于那些无法仔细阅读并意外否决了该问题的人:
整个测试脚本:
PYTHON != which python2.7 || which python
test:
$(PYTHON) -c 'print "hello world"'
在 FreeBSD 上运行:
make
/usr/bin/python -c 'print "hello world"'
hello world
在 CentOS 上运行:
make
test_make:1: *** missing separator. Stop.
如果我使用命令 $(shell ...) 它可以在 CentOS 上运行,但不能在 FreeBSD 上运行。那么,有没有不用gmake的解决方案呢?
更新#2:最终我找到了解决方案(将命令放在反引号中):
PYTHON ?= `which python2.7 || which python`
我不知道为什么它会自行打印:
make
`which python2.7 || which python` -c 'print "hello world"'
hello world
但它有效!你们可以使用它,伙计们:)
答案1
你可能能够做到:
PYTHON != which python2.7 || which python
这适用于 gnu make 4.1 和 bmake 20160220-2+b1
但为什么要麻烦呢?老实说,安装 gnu make 并使用它,或者编写一个配置脚本来为您生成正确定义的 PYTHON 的 Makefile 可能会更简单。