NMAKE를 사용하여 변수에 와일드 카드를 할당 할 수 있습니까? [복제]

Dec 17 2020

저는 UNIX 배경에서 왔기 때문에 GNU / Make에서 다음과 같은 작업을 수행하는 데 익숙합니다.

SRC=$(wildcard src/*.c) OBJ=$(SRC:.c=.o)

all: $(OBJ)
    ...

Microsoft NMAKE에서 대략적으로 동일한 작업을 수행 할 수 있는지 궁금합니다. 다음과 같은 간단한 NMAKE Makefile이 있습니다.

all: obj\a.obj obj\b.obj obj\c.obj 

{src\}.c{obj\}.obj:
    cl /c $** /Fo$@

이것은 잘 작동합니다. 에서 모든 소스 파일을 src/가져와 obj/. 그러나 obj/*.obj모든 개체 파일을 수동으로 작성할 필요가 없도록 기본 대상을 와일드 카드와 같은 형식으로 압축하고 싶습니다 .

NMAKE에서 가능합니까? 나는 NMAKE 문서를 꽤 철저히 확인했고 내가하고 싶은 것과 같은 것을 설명하지 않는 것 같다.

업데이트 :

이 질문에 대한 허용 된 솔루션을 참조로 사용하고 다음 Makefile을 사용하여 원하는 효과를 얻을 수있었습니다 .

.SUFFIXES: .c .obj

obj_files=$(**:.c=.obj)
all: src\*.c
    @$(MAKE) $(obj_files:src=obj)

{src\}.c{obj\}.obj:
    cl /c $< /Fo$@

이것은 obj\하위 폴더를 출력 디렉토리로 사용하여 작동합니다 . $**매크로는 내 소비되는 all타겟.

답변

1 wistful Dec 18 2020 at 01:48

하위 폴더의 모든 .c파일 을 와일드 카드로 처리 하고 다음 Makefile을 사용하여 하위 폴더 src\.obj출력 하도록 컴파일했습니다 obj\.

.SUFFIXES: .c .obj

obj_files=$(**:.c=.obj) all: src\*.c @$(MAKE) $(obj_files:src=obj) {src\}.c{obj\}.obj: cl /c $< /Fo$@

obj_files디렉토리 이름과 파일 접미사를 변경하기 위해 이중 문자열 대체를 수행해야했기 때문에 $**매크로 ( all대상 에서 확장 됨) 로 정의 해야합니다. 지금까지 내가 찾은 모든 리소스는 단일 문자열 대체를 수행하는 방법 만 지정합니다.