2014-02-19 2 views
2

Makefile에서 명령을 실행하고 그 결과를 변수에 저장하고 나중에 결과를 다시 사용하고자합니다. !GNU 및 BSD Makefile에서 명령을 실행하고 그 결과를 변수에 저장하십시오.

BSD 메이크에서

, I는 = 연산자를 사용할 수 있습니다 : 같은이를 작성하는 방법이 있나요

PASSWORD := $(shell openssl rand -base64 48) 

:

PASSWORD != openssl rand -base64 48 

GNU 메이크 파일을, 나는 쉘 기능을 사용할 수 있습니다 이것은 두 가지와 호환되는 방법입니까?


양쪽 경우 출력

명령의 결과 PASSWORD에 할당 예상 그래서 메이크 동일한 PASSWORD 값을 재사용 할 수

quux: 
    @echo $(PASSWORD) 
    @echo $(PASSWORD) 

I을 실행하는 경우를 make quux이면 과 동일한 암호가 두 번 출력됩니다. 예를 들어

:

$ gmake quux 
Y0ZrQQqLF9JK98x9UiIwWwcCN2Cq1wNqzph3ShG1RK0NeqbxWn6p4XB5zgHvfnbY 
Y0ZrQQqLF9JK98x9UiIwWwcCN2Cq1wNqzph3ShG1RK0NeqbxWn6p4XB5zgHvfnbY 

백틱 연산자를 사용하는 것보다이 다르다. 이 경우 두 make와 호환되며 매번 명령을 실행합니다.

답변

2

GNU make 4.0에서는 BSD 연산자 !=이 호환성을 위해 추가되었습니다. 그 전에 GNU make의 버전에서는 운이 없어진다. 재귀 호출 인 "poor man 's"메서드를 사용해야합니다.

BSD 연산자와 GNU가 $(shell ...) 함수의 의미가 약간 다르기 때문에 매우주의하십시오. 쉘 명령의 출력에 변수 참조 (예 : $)가 없으므로 특정 상황에서 차이점을 알아야합니다.

+0

최신 GNU make에 좋은 소식이 도착했습니다. – Dereckson

관련 문제