Makefile에서 1:1 종속성을 생성하는 일반적인 방법은 를 사용하는 것입니다 %
.
%o:%cc
.cc
50개의 파일이 있는데 그 중 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