tee in makefile

auditory의 이미지

makefile안에서 출력을 파일 및 화면 양쪽에서 보려고 tee를 사용합니다.

그런데

command | tee logfile

이렇게 하면 command를 하다가 에러가 나도 tee가 exit code 0을 반환하므로,
그 다음으로 계속 진행이 됩니다.

이걸 진행하지 않도록 command의 exit code를 최종적으로 return할 수 있는 방법이 있을까요?

pastime의 이미지

set -e

auditory의 이미지

set -e 가 makefile에서도 쓰이나요?

지금은 makefile안에서하는거고,

tee의 exit status가 최종적으로 처리된다는게 문제인데요.. (command 의 exit status가 아니라..)

pastime의 이미지

제대로 확인도 안하고 답글을 달아버렸네요..;;

pastime의 이미지

생각보다 까다롭군요.. 제가 찾은 방법으로는
bash를 이용하실 수 있다면 $PIPESTATUS 변수를 읽어서
pipe로 수행된 명령의 종료값을 읽을 수 있습니다.

다음과 같은 형태로 Makefile을 작성해 보시면 될 것 같습니다.

SHELL = /bin/bash
LOGFILE = make.log
 
run_cmd = @(set -e;  \
		$(1) 2>&1 | tee -a $(LOGFILE);  \
		exitcode=$$PIPESTATUS;  \
		\
		if [ $$exitcode != 0 ]; then  \
			exit $$exitcode; \
		fi)
 
all:
	@echo -n > $(LOGFILE)  # truncate log file
	$(call run_cmd,ls -l)  # cmd 1
	$(call run_cmd,false)  # cmd 2 (will fail)
auditory의 이미지

알려주신 방법에서 힌트를 얻어서 아래와 같이 해결했습니다..
감사합니다..

SHELL=/bin/bash -o pipefail