문제

Balsamiq Mockup 파일을 PNG 파일로 자동으로 내보내기 위해 NMake MakeFile을 설정하려고하지만 모든 파일을 명시 적으로 나열하지 않고 일반적인 규칙을 만드는 방법에 대한 헤드 나 꼬리를 만들 수는 없습니다. 나는 수출을 원한다.

이 페이지 파일을 내보내기위한 명령 줄 구문을 자세히 설명하고 이 페이지 .obj 파일에 대한 일반 규칙이 포함 된 예제가 포함되어 있습니다.

지금까지 시도한 Makefile은 다음과 같이 보입니다.

.bmml.png:
    "C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $< $@

그러나 이것은 작동하지 않습니다.

단순히 nmake를 실행하는 경우 (일부 구식 PNG 파일 포함) Nmake는 다음을 수행합니다.

[C:\Temp] :nmake

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


[C:\Temp] :

하나의 특정 파일을 작성하도록 요청하면 다음과 같습니다.

[C:\Temp] :nmake "TestFile.png"

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1073: don't know how to make '"TestFile.png"'
Stop.

[C:\Temp] :

나를 똑바로 세울 수있는 nmake 전문가가 있습니까?

예제 MakeFile을 간단히 복사하여 .txt 파일에서 .dat 파일을 작성하고 실험하기 위해 다음과 같습니다.

.txt.dat:
    copy $< $@

이것은 아무것도하지 않기 때문에 분명히 그러한 일반적인 규칙이 어떻게 작동하는지 이해하지 못합니다. 내가 원하는 파일을 어떻게 든 나열하는 위의 목표를 지정해야합니까?


편집하다: 새로운 답변에 대한 응답 :

이 makefile :

{}.txt{}.dat:
    copy $** $@

이 파일로 (test.dat)

1
2
3

그리고이 명령 :

NMAKE test.txt

이 오류 메시지를 생성합니다.

[C:\] :nmake test.txt

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1073: don't know how to make 'test.txt'
Stop.
도움이 되었습니까?

해결책

Nmake 패턴 규칙은 GNU가 구식 접미사 규칙을 만드는 것과 매우 유사합니다. 귀하의 경우, 당신은 거의 시작하는 것이 옳았지만 .suffixes 선언이 누락되었습니다. 예를 들어:

.SUFFIXES: .bmml .png
.bmml.png:
    @echo Building $@ from $<

나는 이것이 당신의 솔루션의 일부일 뿐이라고 생각합니다. 왜냐하면 당신은 또한 변환 할 모든 파일을 명시 적으로 나열하지 않기를 원했기 때문입니다. 불행히도, NMake에서이를 수행 할 수있는 매우 깨끗한 방법은 모르겠습니다. 종속성 목록에서 와일드 카드 만 확장하고 종속성 목록에서 실제로 원하는 것은 이미 존재하는 파일 목록이 아닙니다 ( *.bmml 파일), 그러나 해당 파일 ( *.png 파일)에서 생성 될 파일 목록. 그럼에도 불구하고, 나는 당신이 다음과 같은 재귀적인 nmake 호출로 당신의 목표를 달성 할 수 있다고 생각합니다.

all: *.bmml
    $(MAKE) $(**:.bmml=.png)

여기서는 Nmake가 확장됩니다 *.bmml PREREQ 목록에서 all 디렉토리의 .BMML 파일 목록으로, 새로운 NMAKE 인스턴스를 시작하여 모든 인스턴스가있는 파일 목록으로 빌드 할 목표를 지정합니다. .bmml ~로 교체되다 .png. 그래서 모든 것을 합치십시오.

.SUFFIXES: .bmml .png
all: *.bmml
    @echo Converting $(**) to .png...
    @$(MAKE) $(**:.bmml=.png)

.bmml.png:
    @echo Building $@ from $<

파일 test1.bmml 및 test2.bmml 파일을 만들고이 makefile을 실행하면 다음과 같은 출력을 얻습니다.

Converting Test1.bmml Test2.bmml to .png...
Building Test1.png from Test1.bmml
Building Test2.png from Test2.bmml

물론,이 .BMML 파일 중 많은 사람들이 있다면 명령 줄 길이 제한 사항을 우연히 실행할 수 있으므로이를 조심하십시오. 이 경우 소스 파일을 명시 적으로 나열하거나 GNU Make (다양한 형태의 Windows에 사용할 수 있음)와 같은 유능한 메이크 도구를 사용하는 것이 좋습니다.

다른 팁

이것이 당신을 위해 일할 것인가? 이것을 makefile에 넣으십시오. :

export : *.bmml
    "C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $** $(**B).png

그런 다음 실행 :

nmake /A

나는 발사미가 없어서 이것을 테스트 할 수 없지만 다음 makefile이 있다면 내 경우에는 다음과 같습니다. :

export : *.txt
    copy $** $(**B).dat

그리고 달리기 nmake /A myfile.txt가있는 폴더에서 myfile.dat을 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top