나는 다음과 같은 디렉토리 구조를 가진 프로젝트를 진행하고 있습니다.
inputs/
a.txt
b.txt
c.txt
outputs/
a.out
b.out
c.out
makefile
outputs
폴더 의 파일은 폴더 의 파일에서 생성되며 inputs
입력 파일 중 하나가 변경 될 때마다 자동으로 업데이트하고 싶습니다.
패턴 규칙이있는 메이크 파일을 생성하여이를 시도했습니다. (이 질문을 간단하게 유지하기 위해 입력 파일을 변환하는 대신 복사합니다)
outputs/%.txt: inputs/%.out
cp $< $@
그러나이 메이크 파일은 내가 원하는대로하지 않았습니다. 실행 make outputs/a.txt
하면 내가 작성한 규칙을 적용하고 오래된 경우 출력 파일을 다시 생성하지만 실행 make
하면 아무 일도 일어나지 않습니다.
make: *** No targets. Stop.
기본적으로 inputs 폴더의 모든 파일에 대해 출력 파일을 생성하고 싶다고 말하는 방법이 있습니까?
edit : 출력 파일이 입력 파일과 다른 파일 접미사를 갖도록합니다.
일반적으로 다음과 같은 makefile로이 작업을 수행합니다.
IN = $(wildcard inputs/*.txt)
OUT = $(subst inputs/,outputs/,$(IN))
outputs/%.txt: inputs/%.txt
cp $< $@
default: $(OUT)
이렇게하면 기본 대상 (파일의 첫 번째 대상)이 만들어지며 , 디렉터리 문자열이 입력에서 출력으로 변경된 OUT
기존 파일의 glob 확장에 따라 달라집니다 IN
.
접미사를 변경하려면 대상을 조작하는 다른 많은 내장 함수가 있습니다. 예를 들어 중간 작업을 추가 할 수 있습니다.
IN2 = $(addsuffix .out,$(basename $(IN)))
basename
기능은 후행를 제거 .txt
하고,이 addsuffix
뒤에 추가됩니다 .out
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다