2016-07-23 4 views
0

Makefile 규칙 섹션에서 쉘 명령을 실행하려고합니다. basename 명령을 사용하여 파일 이름을 얻으려고하면 $$file을 통해 올바른 파일 이름을 제공 할 수 없습니다. 누구든지 제발 도와주세요.Makefile 규칙에서 쉘 명령을 실행 중입니다.

for file in `ls *.fof`; \ 
    do \ 
    $(eval VIP = `basename $$file .fof`) \ 
    echo "filename with ext. is $$file"; \ 
    echo "filename is $(VIP)";\ 
done    

답변

1

를 사용 way, 베이스 이름 (1)은 거의 없습니다. 필요했습니다. 쉘에서

  • 는, 패턴 ${file##*/} 디렉토리를 제거하고 ${file%.*} 확장자를 제거합니다. 내장 기능으로 실행 파일을 호출하는 것보다 빠릅니다.

  • GNU make에는 $ (notdir $ (basename $ (file)))이 있습니다. BSD make도 비슷합니다.

나는 루프를 피하려고합니다. 당신이하고있는 일을 성취하기 위해 나는 같은 것을 할 것입니다.

.SUFFIXES = .fof .T 
NAMES=$(wildcard *.fof) 

all: $(subst .fof,.T,$(NAMES)) 

.fof.T: 
     echo "filename with ext. is $^" 
     echo "filename is $(notdir $(basename([email protected])))" 
0

나는 그것이 작은 변화와 함께 작동 할 수 : 당신이 거기 얻을 수 있지만 VIP= 라인에

all: 
    for file in `ls *.txt`; \ 
     do \ 
     VIP=`basename $$file .txt` ;\ 
     echo "filename with ext. is $$file"; \ 
     echo "filename is $$VIP";\ 
    done 
  1. 변화는
  2. 마지막 에코 $$VIP
관련 문제