【问题标题】:Customize building VC++ in VS2010VS2010自定义构建VC++
【发布时间】:2012-04-29 02:36:52
【问题描述】:

我有一个大型 C++ 项目,我需要在构建阶段执行许多步骤,因为我正在构建一个与 64 和 32 兼容的应用程序,我有三个项目: proj1,Porj2,Proj3

我需要做以下事情:

  1. 从 proj1(32 位版本)中排除 cpp 文件

  2. 将 cpp 文件包含到 proj1(64 位版本)

  3. 构建 proj1

  4. 构建 proj2

  5. 执行proj2的输出

  6. 从 proj3(32 位版本)中排除 cpp 文件

  7. 将 cpp 文件包含到 proj3(64 位版本)

  8. 构建 proj3

  9. 重命名从 proj3 构建的 exe

  10. 从 proj1(64 位版本)中排除 cpp 文件

  11. 将 cpp 文件包含到 proj1(32 位版本)

还有其他一些步骤...我是手动执行的,令人沮丧的是,我发现我需要使用 MSBUILD 但它是否用于构建本机代码?以及如何执行这些任务?

-在项目中排除和包含cpp文件

-建筑项目

【问题讨论】:

  • 是的,本机代码也使用 MSBuild。我无法理解您的其余问题。

标签: visual-studio visual-studio-2010 visual-c++ build msbuild


【解决方案1】:

在 Visual Studio 2010 及更高版本中,C++ 项目使用 MSBuild。


与基于配置排除或包含文件相比,使用预处理器指令有条件地编译文件内容会更简单。例如,将文件的全部内容包装在:

#ifdef MY_32BIT_BUILD_MACRO
// Source file contents here
#endif

同样使用用于 64 位构建的宏。使用 Visual C++ 时,您可以使用 _M_IX86_M_X64 预定义的宏来分别检测您是针对 x86 还是 x64 进行编译。

或者,您可以将Condition 属性添加到项目文件中特定源文件的ClCompile 项,并仅在设置某些属性时将其包含在构建中。不过,我认为源文件中的条件编译是一个更好的选择,除非您需要使用复杂的规则来确定是否包含文件。


在您的解决方案中,您可以设置项目依赖项以确保一个项目先于另一个构建。右键单击解决方案,选择属性,然后浏览到通用属性 -> 项目依赖项。也可以在项目文件中指定依赖关系。

您可以使用构建后任务执行构建的输出。右键单击项目,选择 Properties,然后浏览到 Configuration Properties -> Build Events。 Post-Build 事件可用于在构建完成时执行命令。


与其在构建后重命名可执行文件,不如让构建生成具有正确名称的可执行文件更容易。在项目属性中,在配置属性 -> 常规下,目标名称属性可用于设置主要构建输出的名称。

【讨论】:

  • 如何让它构建 64 版本然后自动构建 32 版本?不用我换平台?
  • 不用我换平台?
  • 感谢您的评论,您让我的生活更轻松。现在我只需要更改平台并编译,您几乎将大约 12 个步骤总结为 2 个步骤..非常感谢!
  • 我不相信这是可能的,至少不是直接的。上次我对此进行调查时(使用 Visual Studio 2010),给定的解决方案配置只能构建特定项目的一个配置。至少有两种潜在的解决方法:(1) 您可以运行 Batch Build(Build -> Batch...),或者 (2) 您可以将 .vcxproj 的内容重构为一个通用的 .props 文件,然后创建两个包含它的 .vcxproj 文件——一个用于构建 32 位,另一个用于构建 64 位。后一个选项便于构建,但需要对 MSBuild 有相当好的了解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 2020-07-03
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
相关资源
最近更新 更多