我对冗长的文本表示歉意,但我在使用VS2013中的自定义构建工具功能进行C ++项目时遇到了一些麻烦。我想获取一个项目的“resource.h”文件并生成一个输出文件,出于这些目的,我们将调用“resource.out”。
我编写了一个带有两个命令行参数的工具 - “resource.h”文件和“resource.out”文件。我首先在一个简单的app-wizard生成的doc / view应用程序MFCApplication1上尝试了这个。我添加了文件“resource.x”作为虚拟文件,以使用自定义构建工具进行“编译”。在该特定文件上,我将“项目类型”设置为“自定义构建工具”,在配置工具时,我有以下内容:
Command Line: "<path-to-tool>" resource.h .\res\resource.out
Outputs: .\res\resource.out
Additional Dependencies: resource.h
这很有效。当我构建MFCApplication1时,我在输出窗口中看到以下内容:
1> Performing Custom Build Tools
1> Successfully generated resource out file ('res\resource.out')
第二行是从我的自定义构建工具输出的。所以在这个简单的测试中,一切都按照我的预期运作。
现在我在我的真实代码上尝试同样的事情。我有一个包含许多项目的解决方案,一个项目负责获取另一个项目的资源并生成一个dll。目录结构如下所示:
Main
MainApp
resource.h
MainRes
MainRes.vcxproj references "..\MainApp\resource.h"
因此MainRes项目引用MainApp项目中的资源文件。在我的MFCApplication1实验成功之后,我将“resource.x”添加到主应用程序,并在MainRes中引用它:
Main
MainApp
resource.h
resource.x
MainRes
MainRes.vcxproj references "..\MainApp\resource.h"
MainRes.vcxproj references "..\MainApp\resource.x"
在MainRes项目中,我选择了“resource.x”,并通过上下文属性将其“Item Type”设置为“Custom Build Tool”,并将其配置为:
Command Line: "<path-to-tool>" ..\MainApp\resource.h ..\MainApp\res\resource.out
Outputs: ..\MainApp\res\resource.out
Additional Dependencies: ..\MainApp\resource.h
现在当我尝试在MainRes中编译“resource.x”时,我收到以下警告(警告MSB8018:没有为项目“.. \ MainApp \ resource.x”指定输出):
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8018: No outputs specified for item "..\MainApp\resource.x". Its custom build command will be skipped.
所以我想也许这是一个上下文的事情,并将配置更改为:
Command Line: "<path-to-tool>" resource.h .\res\resource.out
Outputs: .\res\resource.out
Additional Dependencies: resource.h
我得到同样的警告。我不明白我在这里做错了什么。我将'Outputs'设置为文件,并在命令行中输出文件。在此预先感谢任何人的帮助。我已经花了太多时间在它上面......
答案 0 :(得分:1)
Soooo ......我终于弄清楚,出于某种原因,使用编辑器修改自定义构建工具配置实际上是在错误的配置下将数据保存到vcxproj中。即使我在编辑器中正确设置了配置和平台,它也正在写入文件中的其他配置。谁知道为什么会这样,但是经验教训 - 总是检查你的vcxproj文件!