나는 그것을 사용하고 있다불다존재하다우분투그리고GNU 메이크 4.2.1.
내가 가지고 있는 일부 데이터(.TXT 파일)에 대해 간단한 작업을 수행할 수 있는 Makefile을 작성하려고 합니다. 내 다른 .TXT 파일은 3개의 디렉토리 data/dir1, data/dir2 및 data/dir3에 저장되어 있습니다.
예를 들어 make count_dir1, make count_dir2 또는 make count_dir3을 입력하여 디렉토리의 총 행 수를 얻을 수 있기를 원합니다.
Makefile을 사용하지 않고도 현재 디렉터리가 data/dir1일 때 이 작업을 수행하는 방법을 알고 있습니다.
find . -name '*.TXT*' -type f | xargs wc -l
나는 각 파일의 줄 수와 총계를 얻습니다. 이것이 바로 제가 원하는 것입니다.
현재로서는 내 목표는 기본적으로 다음과 같습니다.
count_dir1: /home/data/dir1
@cd /home/data/dir1 &&\
find . -name '*.TXT*' -type f | xargs wc -l
count_dir2: /home/data/dir2
@cd /home/data/dir2 &&\
find . -name '*.TXT*' -type f | xargs wc -l
count_dir3: /home/data/dir3
@cd /home/data/dir3 &&\
find . -name '*.TXT*' -type f | xargs wc -l
그래서 모든 것이 잘 작동하지만 하나의 목표로 충분하다고 판단했을 때 세 가지 목표를 갖는 것은 분명히 효율적이지 않지만 어떻게 해야 할지 모르겠습니다. 다음과 같은 몇 가지 변수를 정의해야 한다고 가정합니다.
dirs = /home/data/dir1 /home/data/dir2 /home/data/dir3
하지만 목표를 어떻게 달성해야 할지 잘 모르겠고, 내가 읽은 바에 따르면 이런 방식으로 변수를 도입하는 것은 좋은 선택이 아니라고 생각합니다.
미리 감사드립니다! :)
답변1
gmake가 표준을 충분히 준수한다면 다음을 사용할 수 있습니다.
DIRS= /home/data/dir1 /home/data/dir2 /home/data/dir3
.PHONY: $(DIRS)
all: $(DIRS)
$(DIRS):
cd $@ && find . -name '*.TXT*' -type f -exec wc -l {} +
.PHONY:
디렉터리가 존재하고 다른 대상에 종속되지 않기 때문에 필요합니다.
1988년 "execplus"가 도입된 이후 xargs
with 사용은 더 이상 사용되지 않습니다.find
긴 대상 이름에 대한 약어를 선호하는 경우 추가할 수 있습니다.
count1: /home/data/dir1
count2: /home/data/dir2
count3: /home/data/dir3
귀하의 메이크 파일에.