Build 如何禁用Visual Studio';s默认生成并用自定义生成工具替换它?

Build 如何禁用Visual Studio';s默认生成并用自定义生成工具替换它?,build,visual-studio-2017,ninja,Build,Visual Studio 2017,Ninja,我试图在VisualStudio中构建我的C++项目,我有一个基本的安装程序,通过我已经成功测试的命令行编译和链接。 我现在正试图将其集成到VisualStudio中,我想用这个自定义构建工具完全替换默认构建,同时仍然考虑我的项目设置。当我右键单击我的项目并单击“生成”时,我希望它运行我在“项目属性”中设置的自定义生成工具。目前,它似乎执行常规构建,完全忽略了自定义构建步骤。如果我右键单击我的定制构建文件并单击编译,那么它将执行定制构建步骤 自定义生成输出-当我右键单击并编译自定义生成工具文件时

我试图在VisualStudio中构建我的C++项目,我有一个基本的安装程序,通过我已经成功测试的命令行编译和链接。 我现在正试图将其集成到VisualStudio中,我想用这个自定义构建工具完全替换默认构建,同时仍然考虑我的项目设置。当我右键单击我的项目并单击“生成”时,我希望它运行我在“项目属性”中设置的自定义生成工具。目前,它似乎执行常规构建,完全忽略了自定义构建步骤。如果我右键单击我的定制构建文件并单击编译,那么它将执行定制构建步骤

自定义生成输出-当我右键单击并编译自定义生成工具文件时

1>------ Build started: Project: test, Configuration: TEST x64 ------
1>Performing Custom Build Tools
1>[1/1] cl /Fo:build\obj\ /EHsc test.cpp test2.cpp
1>Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27024.1 for x64
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>test.cpp
1>test2.cpp
1>Generating Code...
1>Microsoft (R) Incremental Linker Version 14.16.27024.1
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>/out:test.exe
1>build\obj\test.obj
1>build\obj\test2.obj
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
重建项目上的所有

1>------ Rebuild All started: Project: test, Configuration: TEST x64 ------
1>Performing Custom Build Tools
1>[1/1] cl /Fo:build\obj\ /EHsc test.cpp test2.cpp
1>Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27024.1 for x64
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>test.cpp
1>test2.cpp
1>Generating Code...
1>Microsoft (R) Incremental Linker Version 14.16.27024.1
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>/out:test.exe
1>build\obj\test.obj
1>build\obj\test2.obj
1>pch.cpp
1>test.cpp
1>test2.cpp
1>Generating Code...
1>test.vcxproj -> C:\Users\user\source\repos\test\x64\TEST\test.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
对于后一个输出,它看起来好像执行了两次构建。一次使用VisualStudio(我不想要),一次使用自定义构建工具


有没有一种方法可以在我的项目上单击“构建”,它只执行我的自定义构建?

虽然我认为这不是正确的解决方案,但我发现了一些有效的方法

您可以编辑
.vcxproj
文件以删除所有
ClCompile
命令

以前

  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='TEST|x64'">
     <ClCompile>
      <AdditionalOptions />
    </ClCompile>
    <CustomBuild>
      <Command>"C:\Users\user\Desktop\ninja.exe" -f build.ninja</Command>
      <Outputs>build/obj</Outputs>
    </CustomBuild>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClInclude Include="pch.h" />
    <ClInclude Include="test-private-pch.h" />
    <ClInclude Include="test-public-pch.h" />
    <ClInclude Include="test2.h" />
  </ItemGroup>
  <ItemGroup>
    <ClCompileInclude="pch.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
    </ClInclude>
    <ClCompileInclude Include="test.cpp" />
    <ClCompileInclude Include="test2.cpp" />
  </ItemGroup>
现在,当我重新构建这个项目时,只有我的自定义构建将运行。如果有人对此有更好的解决方案,请随时发布答案

  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='TEST|x64'">
<!--     <ClCompile>
      <AdditionalOptions />
    </ClCompile> -->
    <CustomBuild>
      <Command>"C:\Users\user\Desktop\ninja.exe" -f build.ninja</Command>
      <Outputs>build/obj</Outputs>
    </CustomBuild>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClInclude Include="pch.h" />
    <ClInclude Include="test-private-pch.h" />
    <ClInclude Include="test-public-pch.h" />
    <ClInclude Include="test2.h" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="pch.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
    </ClInclude>
    <ClInclude Include="test.cpp" />
    <ClInclude Include="test2.cpp" />
  </ItemGroup>
1>------ Rebuild All started: Project: test, Configuration: TEST x64 ------
1>Performing Custom Build Tools
1>[1/1] cl /Fo:build\obj\ /EHsc test.cpp test2.cpp
1>Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27024.1 for x64
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>test.cpp
1>test2.cpp
1>Generating Code...
1>Microsoft (R) Incremental Linker Version 14.16.27024.1
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>/out:test.exe
1>build\obj\test.obj
1>build\obj\test2.obj
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========