Linux

有沒有可能在 CentOS 和 FreeBSD 中使用相同的 Makefile?

  • September 19, 2018

不幸的是,在一些舊的 FreeBSD 環境中我不能使用“gmake”,所以我需要編寫一個 Makefile,它也可以與 FreeBSD make 一起使用。最後一個我無法解決的問題 - 使用 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

但它有效!你可以使用它,伙計們:)

也許可以這樣做:

PYTHON != which python2.7 || which python

這適用於 gnu make 4.1 和 bmake 20160220-2+b1

但是為什麼要打擾呢?老實說,安裝 gnu make 並使用它,或者編寫一個配置腳本來為您生成 Makefile 並正確定義 PYTHON 可能會少一些麻煩。

引用自:https://unix.stackexchange.com/questions/469834