首页 > 解决方案 > VS2013 C++ 自定义构建工具不起作用

问题描述

对于冗长的文字,我深表歉意,但我在使用 VS2013 中用于 C++ 项目的自定义构建工具功能时遇到了一些麻烦。我想获取一个项目的“resource.h”文件并生成一个输出文件,出于这些目的,我们将其称为“resource.out”。

我编写了一个带有两个命令行参数的工具——“resource.h”文件和“resource.out”文件。我首先在一个简单的应用程序向导生成的文档/视图应用程序 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”并通过上下文属性,将其“项目类型”设置为“自定义构建工具”,并将其配置为:

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

我得到同样的警告。我不明白我在这里做错了什么。我将“输出”设置为文件,并且在命令行中有输出文件。在此先感谢任何人对此的帮助。我已经在这上面花了太多时间了...

标签: c++visual-studio-2013custom-build-step

解决方案


Soooo ...我终于弄清楚了,由于某种原因,使用编辑器修改自定义构建工具配置实际上是将数据保存到错误配置下的vcxproj中。尽管我在编辑器中正确设置了配置和平台,但它正在写入文件中的不同配置。谁知道为什么会这样,但吸取的教训 - 总是检查你的 vcxproj 文件!


推荐阅读