我有一个支持 #define 的库来控制它的构建方式。但是,该库可以被需要不同版本的多个 EXE 项目使用。我可以让 app/EXE 项目在构建时设置库使用的 #define,或者在解决方案中设置它吗?
我能想到的唯一其他选择是在库项目上创建一个单独的构建配置,但这很快就会失控。这对于例如 unicode/非 unicode 构建来说很常见,但是你最终会成倍增加每个组合的配置数量。
最佳答案
以下方法假定每个 .EXE/app(使用此库)都有自己的 Visual Studio 解决方案。
你确实可以控制图书馆,对吧?步骤 1-3 将对其项目文件进行更改,步骤 4 将一个文件添加到库源代码中。
mylibrary_solution_defines.h
. $(SolutionDir);
在目录列表的开头。 $(SolutionDir)$(ProjectName)\$(Configuration)
?您希望确保为使用它的每个解决方案重建库;不应共享 .lib 或 .obj 文件。 mylibrary_solution_defines.h
的空的虚拟头文件并将其放入您的库源代码中,因此 #include "mylibrary_solution_defines.h"
永远不会失败。 mylibrary_solution_defines.h
包含您的#defines 的文件。 你看到发生了什么吗?每个库源文件都隐含
#include
s "mylibrary_solution_defines.h"
,并优先从解决方案目录中获取该文件。因此该文件对于每个解决方案都可能不同。因此,如果您的解决方案 ConsoleModeInterfaceProgram.sln
需要使用 #define TEXTONLY 1
构建的库,将该行放入 mylibrary_solution_defines.h
与 ConsoleModeInterfaceProgram.sln
位于同一目录中.
关于visual-studio-2008 - 你能在加载的项目上制作一个 VC++ 解决方案集预处理器 #defines 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5272556/