Makefile targets에서 Bash 구문을 사용하려면 어떻게 해야 합니까?
나는 종종 Bash 구문이 매우 유용하다고 생각합니다. 예를 들어, 다음과 같은 프로세스 대체가 있습니다.diff <(sort file1) <(sort file2)
.
Makefile에서 이러한 Bash 명령을 사용할 수 있습니까?저는 다음과 같은 것을 생각하고 있습니다.
file-differences:
diff <(sort file1) <(sort file2) > $@
나의 GNU Make 3.80에서 이것은 사용하기 때문에 오류를 줄 것입니다.sh
대신에bash
명령을 실행합니다.
5.3.2 Choosing the Shell
------------------------
The program used as the shell is taken from the variable `SHELL'. If
this variable is not set in your makefile, the program `/bin/sh' is
used as the shell.
그래서 넣어요SHELL := /bin/bash
당신의 메이크파일 맨 위에, 그리고 당신은 가도 좋을 것입니다.
BTW: 적어도 GNU Make에 대해서는 하나의 대상에 대해서도 이 작업을 수행할 수 있습니다.각 대상에는 다음과 같은 고유한 변수 할당이 있을 수 있습니다.
all: a b
a:
@echo "a is $$0"
b: SHELL:=/bin/bash # HERE: this is setting the shell for b only
b:
@echo "b is $$0"
인쇄됩니다.
a is /bin/sh
b is /bin/bash
자세한 내용은 설명서의 "대상별 변수 값"을 참조하십시오.이 줄은 Makefile에서 원하는 위치로 이동할 수 있습니다. 대상 바로 앞에 있을 필요는 없습니다.
전화할 수 있습니다.bash
직접적으로, 사용-c
플래그:
bash -c "diff <(sort file1) <(sort file2) > $@"
물론 $@ 변수로 리디렉션하지 못할 수도 있지만, 제가 이 작업을 시도했을 때, 저는-bash: $@: ambiguous redirect
오류 메시지로, 당신은 이것에 너무 빠져들기 전에 그것을 조사하는 것이 좋을 것입니다. (그러나 나는 bash 3.2.something을 사용하고 있어서 당신의 것은 다르게 작동할 수도 있습니다.)
한 가지 방법은 대상의 첫 번째 줄에 이렇게 입력하는 것입니다.
your-target: $(eval SHELL:=/bin/bash)
@echo "here shell is $$0"
휴대성이 중요한 경우 Makefile의 특정 셸에 의존하지 않을 수 있습니다.모든 환경에 사용 가능한 bash가 있는 것은(는)
기본 셸을 사용하는 대신 Makefile 내에서 bash를 직접 호출할 수 있습니다.
bash -c "ls -al"
다음 대신:
ls -al
SHELL 변수를 bash를 가리키도록 명시적으로 설정하지 않고 이 작업을 수행하는 방법이 있습니다.SHELL은 후속 makefile에 의해 상속되지 않거나 환경에서 가져오지 않으므로 makefile이 많은 경우 유용합니다.또한 코드를 컴파일하는 모든 사용자가 이러한 방식으로 시스템을 구성해야 합니다.
실행하는 경우sudo dpkg-reconfigure dash
프롬프트에 '아니오'라고 대답하면 시스템에서 대시를 기본 셸로 사용하지 않습니다.그런 다음 적어도 Ubuntu에서는 bash를 가리킵니다.그러나 시스템 셸로 대시를 사용하는 것이 좀 더 효율적입니다.
질문에 대한 직접적인 답변이 아닙니다. 제한적이기 때문입니다. 파일을 bash 구문으로 교체하고 경우에 따라 유용할 수 있습니다(저는 작성자입니다).
- 규칙을 bash-vlan으로 정의할 수 있습니다.
- 자동 변환 기능
기본적인 생각은 가지고 있는 것입니다.while
스크립트 끝의 루프:
while [ $# != 0 ]; do
if [ "$(type -t $1)" == 'function' ]; then
$1
else
exit 1
fi
shift
done
https://asciinema.org/a/435159
언급URL : https://stackoverflow.com/questions/589276/how-can-i-use-bash-syntax-in-makefile-targets
'source' 카테고리의 다른 글
ASP의 주장은 무엇입니까?NET 아이덴티티 (0) | 2023.05.02 |
---|---|
모듈에서 __getattr__ (0) | 2023.05.02 |
Haskell을 사용한 Excel 자동화로 세그먼트 결함 발생 (0) | 2023.04.27 |
ASP에서 divs를 위한 코드 뒤에 있는 파일에서 CSS 스타일을 어떻게 수정합니까?NET? (0) | 2023.04.27 |
ASP.NET 번들최소화 비활성화 방법 (0) | 2023.04.27 |