visual-studio-2008 - 你能在加载的项目上制作一个 VC++ 解决方案集预处理器 #defines 吗?

标签 visual-studio-2008 visual-c++ build-process

我有一个支持 #define 的库来控制它的构建方式。但是,该库可以被需要不同版本的多个 EXE 项目使用。我可以让 app/EXE 项目在构建时设置库使用的 #define,或者在解决方案中设置它吗?

我能想到的唯一其他选择是在库项目上创建一个单独的构建配置,但这很快就会失控。这对于例如 unicode/非 unicode 构建来说很常见,但是你最终会成倍增加每个组合的配置数量。

最佳答案

以下方法假定每个 .EXE/app(使用此库)都有自己的 Visual Studio 解决方案。

你确实可以控制图书馆,对吧​​?步骤 1-3 将对其项目文件进行更改,步骤 4 将一个文件添加到库源代码中。

  • 将项目属性 > C/C++ > 高级 > 强制包含设置为 mylibrary_solution_defines.h .
  • 编辑项目属性 > C/C++ > 常规 > 附加包含目录以放置 $(SolutionDir);在目录列表的开头。
  • 将 Project Properties > General > Output Directory 和 Intermediate Directory 设置为相对于解决方案目录的内容。也许 $(SolutionDir)$(ProjectName)\$(Configuration) ?您希望确保为使用它的每个解决方案重建库;不应共享 .lib 或 .obj 文件。
  • 创建一个名为 mylibrary_solution_defines.h 的空的虚拟头文件并将其放入您的库源代码中,因此 #include "mylibrary_solution_defines.h"永远不会失败。
  • 在每个应用程序/EXE 解决方案中——假设你对使用这个库的每个应用程序有不同的解决方案,否则整个计划将失败——创建一个 mylibrary_solution_defines.h包含您的#defines 的文件。

  • 你看到发生了什么吗?每个库源文件都隐含 #include s "mylibrary_solution_defines.h" ,并优先从解决方案目录中获取该文件。因此该文件对于每个解决方案都可能不同。因此,如果您的解决方案 ConsoleModeInterfaceProgram.sln需要使用 #define TEXTONLY 1 构建的库,将该行放入 mylibrary_solution_defines.hConsoleModeInterfaceProgram.sln 位于同一目录中.

    关于visual-studio-2008 - 你能在加载的项目上制作一个 VC++ 解决方案集预处理器 #defines 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5272556/

    相关文章:

    c++ - 模板模板成员继承 'using'

    java - 如何将 Eclipse 配置为在构建过程中自动刷新项目?

    c++ - header 正确,但找不到标识符

    visual-studio - 将 Visual Studio 2008 Professional 升级到 Visual Studio 2010 Premium

    c# - 从 C# 程序访问 DLL 中的方法

    c++ - _controlfp_s 中的可能错误可能无法正确恢复控制字

    continuous-integration - 在同一台计算机上运行多个 TeamCity Agent?

    xCode 构建脚本使用名称中带有空格的 info.plist

    sql - Visual Studio for SSRS 2008 - 如何将报告组织到解决方案资源管理器中的子文件夹中?

    C# Foreach 和 for 的区别(不是性能)