Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio 2012“;有条件的;项目设置_Visual Studio_Visual C++_Visual Studio 2012_Projects And Solutions - Fatal编程技术网

Visual studio Visual Studio 2012“;有条件的;项目设置

Visual studio Visual Studio 2012“;有条件的;项目设置,visual-studio,visual-c++,visual-studio-2012,projects-and-solutions,Visual Studio,Visual C++,Visual Studio 2012,Projects And Solutions,我有以下情况: >P>两个VisualStudioC++解决方案-一个在内部使用,一个应该是 作为示例代码发送给客户机。这两种解决方案在配置数量和可用项目数量上有所不同 这两个解决方案有一个共同的项目,我需要根据包含它的解决方案进行一些定制 根据父解决方案,我需要自定义以下内容: 可用的项目配置数量-我有4个内部解决方案配置,只有2个客户端配置 一些生成后命令 一些包含路径 一个定义,该定义仅适用于客户机解决方案附带的项目 我想要避免的是为客户提供的解决方案创建和维护一个单独的项目文件

我有以下情况:

    >P>两个VisualStudioC++解决方案-一个在内部使用,一个应该是 作为示例代码发送给客户机。这两种解决方案在配置数量和可用项目数量上有所不同

  • 这两个解决方案有一个共同的项目,我需要根据包含它的解决方案进行一些定制

  • 根据父解决方案,我需要自定义以下内容:

    • 可用的项目配置数量-我有4个内部解决方案配置,只有2个客户端配置
    • 一些生成后命令
    • 一些包含路径
    • 一个定义,该定义仅适用于客户机解决方案附带的项目
  • 我想要避免的是为客户提供的解决方案创建和维护一个单独的项目文件

我尝试使用属性表,但我认为这解决了一个与我不同的问题,主要是在不同的项目之间共享配置。我还研究了如何在项目属性文件中使用Condition属性,看看这是否对我有帮助(仍在研究中)

编辑:我不允许使用任何项目生成工具,如CMake、premake等


在VisualStudio中有什么方法可以实现我所需要的吗?关于如何改进目前为止的设置,您有什么建议吗?也许可以避免这两种解决方案场景?

您可以使用类似的项目生成工具。它使用LUA生成解决方案和项目,因此,您完全可以根据父解决方案自定义项目设置。

您可以使用一些XSLT处理来清理内部项目和要发送给客户端的单独解决方案文件。

由于Visual Studio项目由MSBuild处理,因此可以根据您的需要进行自定义

将自定义目标项目文件导入现有的.vcxproj可能如下所示:

        <!--
        ...
        way to the end of your .vcxproj file

        -->

        <!-- start of custom import part -->

        <Import Project=".\YourInternal.targets" Condition="Exists('.\YourInternal.targets')" />

        <!-- end of custom import part -->

        <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
        <ImportGroup Label="ExtensionTargets">
    </ImportGroup>
</Project>
如果有一组项目需要扩展以进行内部处理,则可以将.vcxproj的基本集与.targets文件中的其他项目连接起来:

.vcxproj

...
<ItemGroup>
    <ClInclude Include="Header.h" />
</ItemGroup>
...
。。。
...
目标

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <!-- includes to items definded in your .vcxproj -->
        <ClInclude Include="@(ClInclude)" />

        <!-- add more items here -->
        <ClInclude Include="Foo.h" />
        <ClInclude Include="Bar.h" />
    </ItemGroup>
</Project>


这些示例仅仅是通过使用MSBuild命令扩展.vcxproj所能实现的初步成果。

不幸的是,我无法使用该工具或任何其他类似工具。您是否已经研究过有条件地导入子项目文件(MSBuild处理类似内容的方式)?@Filburt我该怎么做?我试着寻找关于子项目的文档,但我找不到太多-这是某种隐藏的功能(我来自一个Makefile世界,所以我在VS和MSBuild方面缺乏通用性)你能举个例子吗?这不是一个标准解决方案,需要某种工具来实际处理。这是我刚刚想到的,因为最终项目文件只是简单的XML文档。谢谢你为我指明了正确的方向。虽然它可以工作,但它有两个主要缺点:1。IDE没有意识到这一点(这有多愚蠢?),所以如果我通过IDE中的管理器修改一些属性,那么它就会被写入原始文件中——这有点像噩梦。2.没有简单的方法可以覆盖属性;.targets文件中的优先级最低,因此我必须执行一些基于条件的技巧。总而言之,我现在不相信这种方法实际上比拥有两个不同的项目文件要好。我的示例只是扩展/覆盖的一种可能方式——如果在.vcxproj顶部包含自定义.targets,则可以反过来对行为建模,并让.vcxproj继续。当然,没有直接的方法通过IDE编辑这个。我自己也在和.csproj打交道,不得不承认.vcxproj在很多方面都不同。至少MSBuild可以让您在每次生成之前不必使用任何时髦的Xml工具链来摆弄您的.vcxproj。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <!-- includes to items definded in your .vcxproj -->
        <ClInclude Include="@(ClInclude)" />

        <!-- add more items here -->
        <ClInclude Include="Foo.h" />
        <ClInclude Include="Bar.h" />
    </ItemGroup>
</Project>