Linux
有沒有可能在 CentOS 和 FreeBSD 中使用相同的 Makefile?
不幸的是,在一些舊的 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 可能會少一些麻煩。