실제로 명령을 실행하고 디렉토리를로 변경 some_directory
하지만 하위 프로세스 쉘에서 수행되며 작업중 인 쉘이나 쉘에 영향을 미치지 않습니다.
에서 더 많은 작업을 수행 some_directory
하려면 세미콜론을 추가하고 다른 명령도 추가해야합니다. 규칙의 끝으로 make로 해석되는 줄 바꿈을 사용할 수 없으므로 명확성을 위해 사용하는 줄 바꿈은 백 슬래시로 이스케이프해야합니다.
예를 들면 다음과 같습니다.
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
백 슬래시와 개행을 추가하더라도 모든 명령간에 세미콜론이 필요합니다. 이것은 전체 문자열이 쉘에 의해 단일 행으로 구문 분석되기 때문입니다. 주석에서 언급했듯이 '&&'를 사용하여 명령을 결합해야합니다. 즉, 이전 명령이 성공한 경우에만 실행됩니다.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
cd
어떤 이유로 든 실패 하면 잘못된 것을 파괴 할 수 있으므로 정리와 같은 파괴적인 작업을 수행 할 때 특히 중요합니다 .
그러나 일반적인 사용법은 하위 디렉토리에서 make를 호출하는 것입니다. 이에 대한 명령 행 옵션이 있으므로 cd
직접 전화 할 필요가 없으므로 규칙은 다음과 같습니다.
all:
$(MAKE) -C some_dir all
타겟 "all" 로 변경되어 in을 some_dir
실행합니다 Makefile
. 모범 사례 로서 직접 $(MAKE)
호출 하는 대신 make
올바른 make 인스턴스를 호출하는 데주의를 기울여야하며 (예를 들어 빌드 환경에 특수한 make 버전을 사용하는 경우) 실행시 약간 다른 동작을 제공해야합니다. 와 같은 특정 스위치 사용 -t
.
레코드의 경우 출력이없는 경우에도 make가 명시 적으로 억제하지 않는 한 항상 실행하는 명령을 에코합니다.
make
, 나는 이와 같은 디렉토리를 바꾸고 싶지 않았습니다. 어쩌면 솔루션에 다른 접근법을 시도해야합니까?