ang*_*son 9 png nmake export balsamiq
我正在尝试设置一个nmake makefile来自动将我们的balsamiq模型文件导出到png文件中,但是我担心如何制作一个通用规则无法做到这一点,而无需明确列出所有文件我想出口.
此页面详细介绍了导出文件的命令行语法,此页面包含一个示例,其中包含.obj文件到.exe文件的通用规则.
我到目前为止尝试过的makefile看起来像这样:
.bmml.png:
"C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $< $@
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
如果我只是运行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] :
Run Code Online (Sandbox Code Playgroud)
如果我要求它构建一个特定的文件,它会这样做:
[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] :
Run Code Online (Sandbox Code Playgroud)
在那里任何一个可以让我直截了当的nmake大师?
一个示例makefile,通过复制它们来简单地从.txt文件生成.dat文件,以进行试验,如下所示:
.txt.dat:
copy $< $@
Run Code Online (Sandbox Code Playgroud)
这没什么用,所以显然我不明白这些通用规则是如何运作的.我是否需要指定一个目标,以某种方式列出我想要的文件?
编辑:回答新答案:
这个makefile:
{}.txt{}.dat:
copy $** $@
Run Code Online (Sandbox Code Playgroud)
使用此文件(test.dat)
1
2
3
Run Code Online (Sandbox Code Playgroud)
这个命令:
NMAKE test.txt
Run Code Online (Sandbox Code Playgroud)
生成此错误消息:
[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.
Run Code Online (Sandbox Code Playgroud)
Eri*_*ski 16
NMAKE模式规则很像GNU make old-school后缀规则.在你的情况下,你开始时几乎是正确的,但你错过了.SUFFIXES声明.例如:
.SUFFIXES: .bmml .png
.bmml.png:
@echo Building $@ from $<
Run Code Online (Sandbox Code Playgroud)
我认为这只是解决方案的一部分,因为您还提到要避免明确列出要转换的所有文件.不幸的是,我不知道在NMAKE中有一个非常干净的方法,因为它只扩展了依赖项列表中的通配符,而你在依赖项列表中真正想要的不是已经存在的文件列表(*.bmml)文件),但是将从这些文件(*.png文件)创建的文件列表.不过,我认为你可以用这样的递归NMAKE调用来实现你的目标:
all: *.bmml
$(MAKE) $(**:.bmml=.png)
Run Code Online (Sandbox Code Playgroud)
在这里,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 $<
Run Code Online (Sandbox Code Playgroud)
如果我创建文件Test1.bmml和Test2.bmml然后运行这个makefile,我得到以下输出:
Converting Test1.bmml Test2.bmml to .png...
Building Test1.png from Test1.bmml
Building Test2.png from Test2.bmml
Run Code Online (Sandbox Code Playgroud)
当然,如果你有很多这些.bmml文件,你可能会遇到命令行长度限制,所以要小心.在这种情况下,我建议明确列出源文件,或使用功能更强大的make工具,如GNU make(可用于各种形式的Windows).
归档时间: |
|
查看次数: |
7787 次 |
最近记录: |