在同一个VS项目中拥有多个构建配置的正确且简单的逐步方法是什么,其中解决方案还包含多个项目?这些项目将具有不同的构建配置。基本上,我正在寻找项目 A 与 Dll 调试、Dll 发布、静态(库)调试和静态(库)发布,项目 B 与构建一个 .exe 的调试和发布。
问问题
1272 次
2 回答
3
这不是它的工作方式。如果您为库提供静态链接 CRT 或使用 CRT 的 DLL 版本的选项,则在 EXE 项目上也必须具有相同的选项。混合这些选项通常会产生大量的链接器错误。即使您设法避免它们,当 .lib 中的函数使用与 EXE 中的函数不同的内存分配器时,灾难也会在运行时发生。
使用“所有这些”方法没有什么意义。只要您知道您只会使用静态库并创建一个整体的 EXE blob,那么 CRT 的静态版本就很有意义。使部署程序更容易。如果有一天您打算使用 DLL,那么只有 CRT 的 DLL 版本才有意义。
于 2010-06-01T00:24:02.713 回答
0
实现这一目标的最简单方法是创建多个编译相同源的项目。您可以为您想要的每个案例(DLL、静态库)创建项目。然后,您可以为这些项目进行多种配置,以便它们可以生成多种变体。
项目 A (DLL)
- “DebugStatic”配置 - 调试,静态 CRT -> MYLIBDS.DLL
- “ReleaseStatic”配置 - 发布,静态 CRT -> MYLIBS.DLL
- “DebugDynamic” - 调试,DLL CRT -> MYLIBD.DLL
- “ReleaseDynamic” - 发布,DLL CRT -> MYLIB.DLL
项目 B (LIB)
- “DebugStatic”配置 - 调试,静态 CRT -> MYLIBDS.LIB
- “ReleaseStatic”配置 - 发布,静态 CRT -> MYLIBS.LIB
- “DebugDynamic” - 调试,DLL CRT -> MYLIBD.LIB
- "ReleaseDynamic" - 发布,DLL CRT -> MYLIB.LIB
您可以使用相同的方法为 Ansi 与 Unicode、x86 与 x64、单线程与多线程等生成不同的二进制文件。每个项目都包含相同的源文件集,并根据需要包含条件代码块。然后,您可以将类似这样的内容添加到与库关联的头文件中,以便更轻松地链接到适当的版本:
#ifdef _DEBUG
#ifdef _DLL
#pragma comment(lib, "MYLIBD.LIB")
#else
#pragma comment(lib, "MYLIBDS.LIB")
#endif
#else
#ifdef _DLL
#pragma comment(lib, "MYLIB.LIB")
#else
#pragma comment(lib, "MYLIBS.LIB")
#endif
#endif
于 2010-06-25T18:13:12.940 回答