在一个解决方案中具有多个(不同)构建配置的多个项目

时间:2010-05-31 22:37:13

标签: visual-studio-2010 projects-and-solutions vsprops

在同一个VS项目中拥有多个构建配置的正确且简单的一步一步是什么,其中解决方案还包含多个项目?这些项目将具有不同的构建配置。基本上,我正在寻找像Dll Debug,Dll Release,Static(library)Debug和Static(library)Release的项目A,项目B with Debug&发布构建.exe。

2 个答案:

答案 0 :(得分:3)

这不是它的工作方式。如果您为库提供静态链接CRT或使用CRT的DLL版本的选项,那么您还必须在EXE项目上使用相同的选项。混合选项通常会产生大量的链接器错误。即使你设法避免它们,当.lib中的函数使用与EXE中的函数不同的内存分配器时,灾难也会在运行时发生。

使用“所有这些”方法毫无意义。只要你知道你只使用静态库并创建一个单片EXE blob,那么CRT的静态版本就有意义了。使部署程序更容易。如果你有一天在考虑使用DLL,那么只有CRT的DLL版本才有意义。

答案 1 :(得分:0)

实现这一目标的最简单方法是创建多个编译相同源的项目。您可以为所需的每个案例(DLL,Static Lib)创建项目。然后,您可以为这些项目配置多个配置,以便它们可以生成多个变体。

项目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