gpt4 book ai didi

c++ - Visual Studio 2010 : Specify working directory when running custom build tools on individual files

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:33 29 4
gpt4 key购买 nike

我有一个 Visual Studio 2010 C++ 项目,其中包含需要使用生成 C++ 代码的内部自定义构建工具进行处理的文件。

我已经完成了为每个文件添加自定义构建工具的步骤。在自定义构建工具命令行中,使用“call”确保自定义构建工具在编译 C++ 代码之前针对所有这些文件运行。

唯一的问题是自定义构建工具需要从文件所在的目录运行,而不是从 Visual Studio 解决方案的位置运行。

我现在看到了一些可能的选择,但没有一个是理想的:

  1. 将第一个文件的自定义构建工具命令行更改为:“cd workingdir && call custom-tool ...”我不喜欢这个,因为它很脆弱——如果我在第一个文件之前添加一个按字母顺序排列的新文件,我必须记住,它需要在自定义构建步骤中执行此特殊步骤。
  2. 创建一个批处理文件来更改工作目录,调用自定义构建工具,然后改回。从 Visual Studio 调用此批处理文件。
  3. 使用“开始”而不是“调用”来调用自定义构建工具。这带来了为每个文件打开一个命令外壳的缺点(看起来这些命令外壳需要手动关闭)。

对于从工作目录中的文件运行自定义构建工具是否有更好的选择?

谢谢。

最佳答案

Visual Studio 项目文件是 MSBuild 文件。因此,您可以在 VS 中构建项目时手动修改项目文件并执行其他操作。

为此:

  1. 创建一个简单的 MSbuild 文件,例如命名为MyCustomtool.target .此文件“覆盖”MSBuild 目标并调用您的自定义工具。

这是示例文件:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="BeforeBuild">
<Message Text="Calling custom tool for %(ClCompile.Identity)"/>
<Exec Command="customtool.exe %(ClCompile.Identity)" WorkingDirectory="$(ProjectDir)" />
</Target>
</Project>

这个文件:“覆盖”目标名称“BeforeBuild”,对于组“ClCompile”中定义的每个文件,显示文本消息并执行 customtool.exe,名称为已编译的 .cpp 文件作为参数。

  1. 您必须修改您的 .vcxproj 文件并在最后一行之前包含 </Project>导入您的文件并添加一行:

<Import Project="MyCustomtool.target"/>

在此之后,Visual Studio 将为项目中的每个文件执行您的自定义工具。

一些评论:

  • 因为我没有安装 VS 2010,所以我不能 100% 确定您可以使用哪个目标名称。我认为“BeforeBuild”应该对 VS 2010 有效(在 VS 2017 中我使用“BeforeBuildGenerateSources”)。

  • 您可以将选项“Tools/Options/Projects and Solutions/Build and run/MSBuild project build output verbosity”更改为“detailed”,查看构建过程的详细输出并检查目标名称。

  • 文件组“ClCompile”包含所有 *.cpp 文件。您可以在 .vcxproj 文件中检查文件组名称。
  • 您可以为您的自定义工具设置工作目录(如上所述)。如果您需要在 MSBuild 文件中使用 $(ProjectDir)、$(OutDir) 等 VisualStudio 宏。

关于c++ - Visual Studio 2010 : Specify working directory when running custom build tools on individual files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23554030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com