Makefile: 목록에서 필수 구성 요소 만들기

Makefile: 목록에서 필수 구성 요소 만들기

Makefile에서 1:1 종속성을 생성하는 일반적인 방법은 를 사용하는 것입니다 %.

%o:%cc

.cc50개의 파일이 있는데 그 중 3개에만 관심이 있다고 가정해 보겠습니다 . 나는 그들의 기본 이름 목록을 만들었습니다.

CC_BASENAMES := Source15 Source32 Source41

.o을 반복하는 방법 $(CC_BASENAMES)효과는 다음과 동일해야 합니다.

Source15.o: Source15.cc

Source32.o: Source32.cc

Source41.o: Source41.cc

답변1

무엇을 요구하시는지 잘 모르겠지만 문자열을 조작하는 몇 가지 간단한 방법이 있습니다.

.o예를 들어 각 기본 이름에 접미사를 추가할 수 있습니다 OBJS = $(addsuffix .o,$(CC_BASENAMES)).

예를 들어 하나의 접미사를 다른 접미사로 변환할 수 있습니다 $(OBJS:.o=.cc). 예를 들어 원하는 것은 Makefile일 수 있습니다.

CC_BASENAMES := Source15 Source32 Source41
OBJS = $(addsuffix .o,$(CC_BASENAMES))
SRCS = $(OBJS:.o=.cc)

fred.o: $(SRCS)
        cc $(SRCS) -o fred.o

또는 더 일반적으로는 먼저 SRCS를 정의하고 여기에서 OBJS를 파생시킵니다.


종속성 규칙을 특정 대상에만 적용하려면 다음을 사용할 수 있습니다.대상: 대상 모드: 전제 조건 모드

$(OBJS): %.o: %.cc

바라보다그누가 만든.

답변2

일반적인 빌드 규칙(예: )이 있다고 해서 매번 50개의 소스 파일을 모두 확인해야 한다는 %o:%cc의미는 아닙니다 . make당신이 해야 할 일은 원하는 출력을 지정한 다음 make규칙을 적용하여 이를 구축하는 것입니다. 예를 들어 다음을 실행할 수 있습니다.

$ make Source15.o Source32.o Source41.o

명령줄이나 makefile에서 특정 대상 만들기

my_build: Source15.o Source32.o Source41.o

그런 다음 해당 타겟을 빌드하도록 요청합니다 make.

$ make my_build

관련 정보