对于冗长的文本,我深表歉意,但我在为 C++ 项目使用 VS2013 中的自定义生成工具功能时遇到了一些问题。我想获取项目的“resource.h”文件并生成一个输出文件,出于这些目的,我们将其称为“resource.out”。
我编写了一个带有两个命令行参数的工具——“resource.h”文件和“resource.out”文件。我首先在一个简单的应用程序向导生成的文档/ 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”并通过上下文属性,将其“项目类型”设置为“自定义构建工具”,并将其配置为:
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
我收到了同样的警告。我不明白我在这里做错了什么。我将“输出”设置为一个文件,并且在命令行中有输出文件。提前感谢任何人对此的帮助。我已经在这上面花了太多时间...
- 史蒂夫
最佳答案
太棒了...我终于弄明白了,由于某种原因,使用编辑器修改 Custom Build Tool 配置实际上是在错误的配置下将数据保存到 vcxproj 中。尽管我在编辑器中正确设置了配置和平台,但它正在写入文件中的不同配置。谁他妈的知道这是为什么,但吸取教训 - 始终检查您的 vcxproj 文件!
关于c++ - VS2013 C++ 自定义生成工具不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50256701/