[GN] Fix TargetPath in Visual Studio projects
GN assumes that output_dir is root_build_dir for executables.
If that not so, Visual Studio can't find an executable to run and debug.
To fix it we are changing TargetPath field from $(ProjectName)$(TargetExt).
to exact path to ninja target output. Not sure about chromium, but it makes
sense for some standalone configurations
R=avakulenko@chromium.org, dpranke@chromium.org
Change-Id: Id9ccb7be96cc11f9504f4ea5a6e6117e1c55247b
Reviewed-on: https://chromium-review.googlesource.com/852459
Commit-Queue: agrieve <agrieve@chromium.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#528626}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: e3ec6398302a14ad384388a35cc1f5bd17bdbe57diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index 816f1d7..a8fe041 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -512,6 +512,8 @@
project.SubElement("PropertyGroup", XmlAttributes("Label", "UserMacros"));
+ std::string ninja_target = GetNinjaTarget(target);
+
{
std::unique_ptr<XmlElementWriter> properties =
project.SubElement("PropertyGroup");
@@ -524,8 +526,7 @@
}
properties->SubElement("TargetName")->Text("$(ProjectName)");
if (target->output_type() != Target::GROUP) {
- properties->SubElement("TargetPath")
- ->Text("$(OutDir)\\$(ProjectName)$(TargetExt)");
+ properties->SubElement("TargetPath")->Text("$(OutDir)\\" + ninja_target);
}
}
@@ -636,8 +637,6 @@
"$(VCTargetsPath)\\BuildCustomizations\\masm.targets"));
project.SubElement("ImportGroup", XmlAttributes("Label", "ExtensionTargets"));
- std::string ninja_target = GetNinjaTarget(target);
-
{
std::unique_ptr<XmlElementWriter> build =
project.SubElement("Target", XmlAttributes("Name", "Build"));