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을 생성하는 구성 스크립트를 작성하는 것이 더 간단할 것입니다.

관련 정보