CentOS 和 FreeBSD 是否有可能使用相同的 Makefile?

CentOS 和 FreeBSD 是否有可能使用相同的 Makefile?

不幸的是,在一些旧的 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 可能会更简单。

相关内容