Makefile에 변수를 도입하는 방법

Makefile에 변수를 도입하는 방법

나는 그것을 사용하고 있다불다존재하다우분투그리고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"가 도입된 이후 xargswith 사용은 더 이상 사용되지 않습니다.find

긴 대상 이름에 대한 약어를 선호하는 경우 추가할 수 있습니다.

count1: /home/data/dir1

count2: /home/data/dir2

count3: /home/data/dir3

귀하의 메이크 파일에.

관련 정보