【发布时间】:2016-02-26 09:42:59
【问题描述】:
我找到了this Gem,这正是我需要的:
在构建单个 sln 配置而不复制项目文件时为多个 配置构建一个项目:
在 Visual Studio 2010 中导入项目对我来说是这样的:
TestProject64.vcxproj
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="TestProject.vcxproj" /> *<== the wrapped project* <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Release|x64"> *<== just needed by VS* <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{B7D61F1C-B413-4768-8BDB-31FD464AD053}</ProjectGuid> </PropertyGroup> </Project>TestProject64.vcxproj.filters
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="TestProject.vcxproj.filters" /> </Project>TestProject.vcxproj 内部定义了两个配置:Release|x86 和释放|x64。如您所见,TestProject64.vcxproj 只有 发布|x64 配置。定义至少一种配置 TestProject64.vcxproj 是必须的,否则 Visual Studio 不会 能够将 TestProject64.vcxproj 添加到解决方案中。
现在可以同时包含 TestProject.vcxproj 和 TestProject64.vcxproj 到相同的解决方案并构建 Release|x86 和 同时发布|x64。
现在的问题是是否所有 Visual Studio 版本 2010 - 2015+ 都能很好地处理这个问题:
- VS 会尝试以某种方式编辑/规范化包装器项目吗?
- 打开项目属性会不会有什么奇怪的行为?
- 在命令行上从 IDE 与 MSBUILD 构建时会出现意外行为吗?
底线:这是否可以在生产团队中部署而不会让人头疼?
用例(任何人都感兴趣):
- X.sln
- proj_cpp_dll ... C++ DLL 可以在 64 位和 32 位中构建
- proj_exe1_x64 ...需要64位版本的DLL
- proj_exe2_Win32 ...需要32位版本的DLL
通过Release|Any CPU(或Release|Mixed Platforms)的一次构建过程必须(应该)足以构建它。
【问题讨论】:
-
似乎智能感知/查找/导航体验可能不是最理想的,因为所有文件都会出现两次。无论如何,无论它是否有效,链接问题的第二个答案(或变体)是 imo 更好的解决方案:经过尝试、测试、易于扩展且没有意外(对您的 3 个问题回答“否”:)。如果这不妨碍您:一个更简单的解决方案是向 dll 项目添加一个构建后事件,该项目只是执行
<MsBuild Projects="$(MsBuildThisProjectFile)" Targets="Build" Properties="Platform=<otherplatform>"/> -
@stijn - 哪个是“第二个”?
标签: visual-studio visual-c++ msbuild projects-and-solutions