使MSBuild编译具有Win32和Win64平台依赖项的项目

孤儿

我有一个大型解决方案,其中包含10个以上的C ++项目。

将全部溶液是64只,除了项目P,其既需要两个64位win32的版本(在适当的一个在运行时加载)。

项目P依赖于lib文件的其他几个项目:CH,它们已编译为lib。

P像这样引用CH

<ProjectReference Include="..\C\C.vcxproj">
   <Project>{....}</Project>
</ProjectReference>
<ProjectReference Include="..\H\H.vcxproj">
   <Project>{....}</Project>
</ProjectReference>

我想为两个平台构建项目P。

我选择从meta-P项目中执行此操作,该项目像这样调用P

<MSBuild Projects="..\P\P.vcxproj" Properties="Platform=Win32"/>
<MSBuild Projects="..\P\P.vcxproj" Properties="Platform=x64"/>

这允许开发人员自由更改P,然后通过构建meta-P一次构建两个版本

问题是,当meta-P在项目P上调用MSBuild时,CH的引用受解决方案环境(在该环境中活动平台始终为x64)的影响。

要将Win32 P链接到其正确的C.libH.lib时,将打开开放式解决方案配置,并且Studio尝试将其与x64版本链接,但失败。

我使用meta-P中exec任务暂时解决了它直接在P运行MsBuild.exe这忽略了Visual Studio环境属性。

正确读取平台的正确解决方案是什么?

孤儿

正确的解决方案是添加一个未公开的属性,名为ShouldUnsetParentConfigurationAndPlatform并将其设置为false

放置它的唯一正确位置是在P项目中的每个项目引用项目中,否则它将被忽略。

所以最终看起来像这样:

<ProjectReference Include="..\C\C.vcxproj">
  <Project>{....}</Project>
  <Properties>ShouldUnsetParentConfigurationAndPlatform=false</Properties>
</ProjectReference>
<ProjectReference Include="..\H\H.vcxproj">
  <Project>{....}</Project>
  <Properties>ShouldUnsetParentConfigurationAndPlatform=false</Properties>
</ProjectReference>

这将导致Visual Studio遵循CH的继承属性,而不是从Solution环境中读取它们。

编辑:从注释中查看有用的参考:https : //github.com/Microsoft/msbuild/blob/98d38cb/src/XMakeTasks/AssignProjectConfiguration.cs#L198-L218

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Visual Studio中“ win32项目”名称与x86或x64平台有什么关系

来自分类Dev

#ifdef WIN32 #elif WIN64 #endif

来自分类Dev

在Delphi中,编译器指令WIN32和CPUX86,WIN64和CPUX64是否可以互换?

来自分类Dev

osgi.os属性的“ win32”和“ win64”

来自分类Dev

为Win32和Win64开发的最低Visual Studio版本是哪个?

来自分类Dev

在 WIN32 和 WIN64 中配置浮点单元上下文

来自分类Dev

默认的Win32项目具有恒定数量的内存泄漏

来自分类Dev

为Win32编译的Win64 SSE代码产生错误的性能计数器结果

来自分类Dev

为什么在x64平台上的Win32 WindowProc中获得AccessViolation?

来自分类Dev

如何强制VisualStudio不创建Win32平台

来自分类Dev

python输出信息中的win32 ro win64?

来自分类Dev

python输出信息中的win32 ro win64?

来自分类Dev

可变函数在Win32中起作用,但在Win64中不起作用

来自分类Dev

Visual Studio 2005中的空项目和Win32控制台项目之间的差异

来自分类Dev

在Delphi XE4 Win64平台中无法使用cl.exe编译的C.OBJ文件

来自分类Dev

使用Eclipse Paho MQTT编译Visual C ++ Win32项目时出现LNK2019错误

来自分类Dev

在没有Windows.h的WIN32上编译

来自分类Dev

TFS 2013-具有嵌套依赖项的MSBuild项目

来自分类Dev

具有HWND_BROADCAST的Win32 API SendMessage

来自分类Dev

跳过可选的依赖关系:[email protected]不受支持的平台:想要的{“ os”:“ darwin”,“ arch”:“ any”}(当前:{“ os”:“ win32”,“ arch”:“ x64” })

来自分类Dev

Delphi:如何确定应用程序是否在 Win32/Win64 下运行并在 64 位上自动启动 64 位版本?

来自分类Dev

Visual Studio将平台更改从x64还原为Win32

来自分类Dev

win32控制台和命令提示符之间有什么区别?

来自分类Dev

BadImageFormatException 和有效的 Win32

来自分类Dev

编译具有多个版本的依赖项的项目

来自分类Dev

libfaad2.dll不是有效的win32应用程序-依赖项错误kernel32.dll

来自分类Dev

libfaad2.dll并非有效的Win32应用程序-依赖项错误kernel32.dll

来自分类Dev

写入内存缓冲区,并检查Win32平台上是否充满SEH异常?

来自分类Dev

针对Windows 2000的Visual Studio 2012 Win32项目

Related 相关文章

  1. 1

    Visual Studio中“ win32项目”名称与x86或x64平台有什么关系

  2. 2

    #ifdef WIN32 #elif WIN64 #endif

  3. 3

    在Delphi中,编译器指令WIN32和CPUX86,WIN64和CPUX64是否可以互换?

  4. 4

    osgi.os属性的“ win32”和“ win64”

  5. 5

    为Win32和Win64开发的最低Visual Studio版本是哪个?

  6. 6

    在 WIN32 和 WIN64 中配置浮点单元上下文

  7. 7

    默认的Win32项目具有恒定数量的内存泄漏

  8. 8

    为Win32编译的Win64 SSE代码产生错误的性能计数器结果

  9. 9

    为什么在x64平台上的Win32 WindowProc中获得AccessViolation?

  10. 10

    如何强制VisualStudio不创建Win32平台

  11. 11

    python输出信息中的win32 ro win64?

  12. 12

    python输出信息中的win32 ro win64?

  13. 13

    可变函数在Win32中起作用,但在Win64中不起作用

  14. 14

    Visual Studio 2005中的空项目和Win32控制台项目之间的差异

  15. 15

    在Delphi XE4 Win64平台中无法使用cl.exe编译的C.OBJ文件

  16. 16

    使用Eclipse Paho MQTT编译Visual C ++ Win32项目时出现LNK2019错误

  17. 17

    在没有Windows.h的WIN32上编译

  18. 18

    TFS 2013-具有嵌套依赖项的MSBuild项目

  19. 19

    具有HWND_BROADCAST的Win32 API SendMessage

  20. 20

    跳过可选的依赖关系:[email protected]不受支持的平台:想要的{“ os”:“ darwin”,“ arch”:“ any”}(当前:{“ os”:“ win32”,“ arch”:“ x64” })

  21. 21

    Delphi:如何确定应用程序是否在 Win32/Win64 下运行并在 64 位上自动启动 64 位版本?

  22. 22

    Visual Studio将平台更改从x64还原为Win32

  23. 23

    win32控制台和命令提示符之间有什么区别?

  24. 24

    BadImageFormatException 和有效的 Win32

  25. 25

    编译具有多个版本的依赖项的项目

  26. 26

    libfaad2.dll不是有效的win32应用程序-依赖项错误kernel32.dll

  27. 27

    libfaad2.dll并非有效的Win32应用程序-依赖项错误kernel32.dll

  28. 28

    写入内存缓冲区,并检查Win32平台上是否充满SEH异常?

  29. 29

    针对Windows 2000的Visual Studio 2012 Win32项目

热门标签

归档