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
대상 에서 확장 됨) 로 정의 해야합니다. 지금까지 내가 찾은 모든 리소스는 단일 문자열 대체를 수행하는 방법 만 지정합니다.