您可以在加载的项目上创建 VC++ 解决方案集预处理器 #defines 吗?

2023-12-11

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

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


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

你确实拥有图书馆的控制权,对吗?步骤 1-3 将对其项目文件进行更改,步骤 4 将文件添加到库源代码中。

  1. 设置项目属性 > C/C++ > 高级 > 强制包含到mylibrary_solution_defines.h .

  2. 编辑项目属性 > C/C++ > 常规 > 要放置的其他包含目录$(SolutionDir);在目录列表的开头。

  3. 将“项目属性”>“常规”>“输出目录”和“中间目录”设置为与解决方案目录相关的目录。也许$(SolutionDir)$(ProjectName)\$(Configuration)?您希望确保为每个使用它的解决方案重建该库;不应共享 .lib 或 .obj 文件。

  4. 创建一个空的虚拟头文件,名为mylibrary_solution_defines.h并将其放入您的库源代码中,以便#include "mylibrary_solution_defines.h"永远不会失败。

  5. 在每个应用程序/EXE 解决方案中 - 假设您对使用此库的每个应用程序都有不同的解决方案,否则整个计划将失败 - 创建一个mylibrary_solution_defines.h文件中包含#defines。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您可以在加载的项目上创建 VC++ 解决方案集预处理器 #defines 吗? 的相关文章

随机推荐