0

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

我需要执行以下操作:

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

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

  3. 构建项目1

  4. 构建项目2

  5. 执行 proj2 的输出

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

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

  8. 构建项目3

  9. 重命名从 proj3 构建的 exe

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

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

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

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

-建筑项目

4

1 回答 1

2

在 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 事件可用于在构建完成时执行命令。


与其在构建后重命名可执行文件,不如让构建生成具有正确名称的可执行文件更容易。在 Project 属性中,在 Configuration Properties -> General 下,Target Name 属性可用于设置主要构建输出的名称。

于 2012-04-17T18:14:28.400 回答