CentOSとFreeBSDは同じMakefileを使用できますか?

CentOSとFreeBSDは同じMakefileを使用できますか?

残念ながら、以前のFreeBSD環境では「gmake」を使用できないため、FreeBSD makeでも機能するMakefileを作成する必要があります。私が解決できない最後の問題 - たとえば、シェルコマンドを使用してPython実行可能ファイルのフルパスを取得する必要があります。

PYTHON       := $(shell which python2.7 || which python)

しかし、FreeBSD makeはこれを完全に無視します。

test:
     echo == $(PYTHON) ==

その後、makeテストを実行します。

$ 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を生成する構成スクリプトを作成する方が簡単です。

おすすめ記事