Makefile에서 cat을 사용하여 파일을 병합하는 방법은 무엇입니까?

Makefile에서 cat을 사용하여 파일을 병합하는 방법은 무엇입니까?

우선 여기가 이런 질문을 드리는 것이 맞는지 전혀 모르겠습니다만...

나는 현재 디렉토리에서 작업 중이며 디렉토리 파일의 모든 내용을 포함하는 파일을 생성하려고 합니다. 요구 사항은 Makefile의 규칙을 사용하여 이 작업을 수행해야 한다는 것입니다. 현재 내 makefile의 맨 위에는 파일 목록이 있고 그 다음에는 다른 규칙이 있고 그 다음에는 슬픈 규칙에 대한 시도가 있습니다. 내가 겪고 있는 문제는 "y에 대상 x가 필요하다는 규칙이 없습니다"라는 메시지가 계속 표시된다는 것입니다. 제 생각에는 레시피나 전제 조건에 문제가 있는 것 같습니다. 그래서:

FILES= file1 file2 file3 file4 file5...

directory_name/all.txt: **HERE IS THE PART IDK ABOUT**
   cat $^ > $@

나는 make 명령과 일반적인 코딩에 대해 매우 익숙하지 않기 때문에 아마도 어리석은 질문일 수도 있지만 온라인의 다른 곳에서는 여전히 만족스러운 답변을 찾을 수 없습니다. 나는 해당 디렉토리(directory_name/%.txt 등)로 파일을 참조하거나 파일을 전제 조건으로 나열하려고 시도했지만 아무것도 작동하지 않습니다.

답변1

귀하의 규칙은 다음과 같습니다

directory_name/all.txt: $(FILES)
        cat $(FILES) > $@

이는 규칙이 GNU make및 BSD 에 대해 작동하도록 최대 이식성을 제공합니다 make(이해하지 못할 수 있으며 $^어떤 구현을 사용하고 있는지 말하지 않았습니다). 명령이 포함된 줄은 cat탭을 사용하여 들여쓰기해야 합니다.

답변2

종속성 목록은 $(FILES)입니다.

기본적으로 이는 지정된 목록을 확장합니다. 따라서 유효성에 기여하는 파일이 대상 자체보다 최신인 경우 대상이 다시 생성됩니다.

패턴이 있는 경우 파일에 와일드카드를 사용하는 약어가 있습니다. 귀하의 예를 들어 다음과 같을 수 있습니다.

FILES= file[1-9]

관련 정보