Makefile의 와일드카드 및 Foreach

Makefile Ui Waildeukadeu Mich Foreach



파일은 간단한 텍스트 파일이든, 프로그램 코드 파일이든, 메이크파일이든 항상 다양한 유형의 콘텐츠로 구성됩니다. 모든 파일의 콘텐츠 유형은 해당 파일을 고유하게 만들고 다른 파일 형식과 구별합니다. 마찬가지로 makefile은 작업을 올바르게 수행하기 위해 다양한 요소를 사용하는 규칙으로 구성됩니다. 이러한 요소에는 고유하고 추가 기능을 수행하는 데 필요한 와일드카드와 foreach가 있습니다. 이 가이드에서는 makefile에서 사용되는 와일드카드와 foreach의 강력한 기능에 대해 설명합니다.

Makefile의 와일드카드

일반적으로 와일드카드는 예측할 수 없고 상황을 어떤 식으로든 반전시킬 수 있는 요소로 알려져 있다. makefile의 와일드카드는 파일이든 폴더이든 현재 작업 디렉터리에서 가능한 모든 패턴을 탐지하는 보너스를 수행하는 데 사용됩니다. 이러한 소스 파일은 모든 유형이 될 수 있습니다.







Makefile에서 와일드카드를 사용하려면 별표 '*' 또는 '?' 뒤에 오는 'wildcard' 키워드를 사용해야 합니다. 기호와 점으로 연결된 파일 확장자입니다. “?”를 활용할 수도 있습니다. 단일 문자를 검색하려면 기호를 사용하고 여러 문자와 일치하려면 '*'를 사용합니다. 이 전체 구조는 괄호와 '$' 기호 내에서 활용되어야 합니다. 예를 들어, 와일드카드를 통해 값 파일을 가져오는 'SRCS' 변수를 선언합니다. 이 와일드카드는 끝에 'cpp' 패턴이 있는 모든 파일을 찾습니다.





Makefile의 Foreach

makefile의 foreach 함수는 프로그래밍 언어의 foreach 루프와 똑같이 작동합니다. 즉, 목록의 항목을 반복합니다. makefile의 foreach 함수는 목록의 각 항목에 대해 특정 작업을 수행합니다. 이 요소는 변수이거나 모든 소스 파일일 수 있습니다. 예를 들어, 세 개의 소스 파일 목록이 포함된 SOURCES 변수를 통해 makefile의 foreach 함수 구문을 자세히 설명합니다. foreach 함수는 이 SOURCES 변수를 사용하여 소스 파일 목록을 반복하고 다른 'OBJECTS' 변수에 저장하여 세 개의 개체 파일에 대해 동일한 이름을 만듭니다. 마지막 두 줄은 makefile 규칙을 사용하여 반복 후 각 C 파일에 대한 개체 파일을 만드는 방법을 보여줍니다.





소스 := file1.c file2.c file3.c
객체 := $ ( foreach 소스,$ ( 소스 ) ,$ ( 소스:.c=.o ) )
$OBJECTS : % .영형: % .씨
$ ( CC ) $ ( CFLAGS ) -씨 $ < -영형 $ @

예 1: 와일드카드 사용

와일드카드 및 foreach 함수의 그림과 작업을 표시하기 위해 C++ 파일을 소개합니다. 이 “salary.cpp” 파일은 입출력 스트림을 원활하게 사용할 수 있도록 “iostream” 헤더를 사용하여 시작됩니다. 메인 메소드는 정수형 변수 “s”와 런타임 시 입력값을 요청하는 “cout” 문을 선언합니다. 'cin' 표준 입력 스트림은 런타임 시 사용자로부터 값을 가져와 변수 's'에 저장합니다. 'cout'은 사용자가 입력한 값을 콘솔 화면에 표시해 줍니다.

#include
네임스페이스 std 사용;
정수 메인 ( ) {
정수 s;
시합 << '급여 입력: ' ;
식사 >> 에스;
시합 << ' \N 샐러리: ' << 에스 << 끝;
반품 0 ;
}



C++용 컴파일러를 정의하는 'CXX' 변수로 메이크파일을 시작하고, CXXFLAGS 변수는 C++ 컴파일러용 플래그를 보유합니다. EXECUTABLE 변수는 makefile 실행 후 생성되는 실행 가능한 'hello' 파일의 이름을 보유합니다. SRCS 변수는 '.cpp'로 끝나는 모든 패턴을 검색하기 위해 와일드카드 '*'를 사용하여 현재 디렉터리에서 모든 C++ 파일을 가져옵니다. OBJS 변수는 SRCS 변수를 사용하여 생성할 개체 파일의 이름을 보유하며 'cpp' 확장자를 'o'로 바꿉니다. 기본 'all' 대상은 makefile을 빌드하며 EXECUTABLE 변수에 따라 달라집니다.

첫 번째 규칙은 “OBJS” 변수를 통해 생성된 파일 이름을 사용하여 OBJS 변수(객체 파일 이름) 개체 파일에 의존하는 대상 “hello” 파일을 생성합니다. 두 번째 makefile 규칙은 C++ 코드 파일을 컴파일한 후 C++ 파일에 의존하는 '.o' 확장자를 가진 개체 파일을 생성합니다. 여기서 '%'는 'cpp'로 끝나는 모든 패턴의 파일 이름을 검색하기 위한 와일드카드입니다. 결국 clean 대상은 'rm' 명령을 사용하여 '-f' 플래그를 사용하여 디렉터리에서 새로 생성된 실행 파일과 개체 파일을 강제로 정리합니다.

CXX = g++
CXXFLAGS = -벽 -표준 =c++ 열하나
실행 가능 = 안녕하세요
SRCS = $ ( 와일드카드 * .cpp )
객체 = $ ( SRCS:.cpp=.o )
모두: $ ( 실행 가능 )
$ ( 실행 가능 ) : $ ( 객체 )
$ ( CXX ) $ ( CXXFLAGS ) -영형 $ @ $ ( 객체 )
% .영형: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -씨 $ < -영형 $ @
깨끗한:
RM -에프 $ ( 실행 가능 ) $ ( 객체 )

'make' 명령을 실행하면 대상 파일과 개체 파일이 모두 생성됩니다. 실행 가능한 'hello' 파일을 실행한 후 사용자에게 급여를 입력하라는 메시지가 표시되고 '67000'을 추가합니다. 마지막에는 급여가 다시 표시됩니다.

만들다

예 2: Foreach 사용

와일드카드를 사용한 후에는 makefile에서 foreach 함수를 사용할 차례입니다. makefile 코드의 나머지 부분은 동일합니다. 6행에서는 Kate, Kim, Tim의 세 가지 값 목록으로 'NAMES'라는 또 다른 변수를 초기화합니다. 기본 'all' 대상은 EXECUTABLE 변수(대상 파일 이름 'hello') 및 foreach 문에 따라 달라집니다. 'addprefix' 함수는 'NAMES' 목록의 모든 이름 시작 부분에 'run_' 접두사를 추가하여 대상 이름을 동적으로 생성하기 위해 'NAMES' 변수를 반복합니다.

8줄의 규칙은 출력 실행 가능 대상 파일, 즉 hello가 'OBJS'에 종속됨을 나타냅니다. '-o' 플래그는 OBJS를 사용하여 대상 출력 파일을 생성합니다. 열 번째 줄의 규칙은 'cpp' 확장자를 가진 소스 파일을 사용하여 대상 개체 파일을 생성합니다. 이를 위해 '-c' 플래그를 사용하여 소스 파일을 컴파일하고 타겟 생성에 필요한 관련 개체 파일을 생성합니다. 13번째 줄에서는 EXECUTABLE 변수를 사용하여 접두사로 'run_'으로 시작하는 다른 이름을 가진 출력을 생성합니다. 결국 정리 대상과 Phony 대상은 개체와 대상 파일을 제거하고 정리합니다.

CXX = g++
CXXFLAGS = -벽 -표준 =c++ 열하나
# 실행 가능한 대상 파일
실행 가능 = 안녕하세요
SRCS = $ ( 와일드카드 * .cpp )
객체 = $ ( SRCS:.cpp=.o )
# 이름 목록
이름 = 케이트 김 팀
# 대상
모두: $ ( 실행 가능 ) $ ( addprefix run_, $ ( 이름 ) )
$ ( 실행 가능 ) : $ ( 객체 )
$ ( CXX ) $ ( CXXFLAGS ) -영형 $ @ $ ( 객체 )
% .영형: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -씨 $ < -영형 $ @
# 각 이름에 대한 대상을 만듭니다.
달리다_ % : $ ( 실행 가능 )
. / $ ( 실행 가능 ) $*
깨끗한:
RM -에프 $ ( 실행 가능 ) $ ( 객체 )
# 가짜 표적
.PHONY: 모두 깨끗함

'make' 명령을 사용하면 실행 가능한 'hello' 대상이 생성되고 'NAMES' 변수에 지정된 각 이름에 대해 프로그램이 실행됩니다.

만들다

'run_' 접두사가 있는 목록의 이름을 사용하여 출력을 수정할 수도 있습니다.

달려라_김

결론

이 가이드에서는 makefile의 와일드카드 사용 및 foreach 개념에 대해 설명하면서 해당 구문을 별도로 논의했습니다. 그 후, 동일한 확장자를 가진 파일을 가져오고 변수 목록에서 값을 반복하는 출력 작업에 대해 자세히 설명하기 위해 코드 예제를 논의했습니다.