代码之家  ›  专栏  ›  技术社区  ›  KTC

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

  •  4
  • KTC  · 技术社区  · 14 年前

    在同一个VS项目中有多个构建配置(解决方案也包含多个项目)的正确且简单的逐步方法是什么?这些项目将有不同的构建配置。基本上,我要找的是类似项目A的Dll调试,Dll发布,静态(库)调试,静态(库)发布,项目B的调试和发布,建立.exe。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Hans Passant    14 年前

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

    “全部使用”的方法意义不大。只要你知道你将只使用静态库和创建一个单一的EXeblob,那么静态版本的CRT就有意义了。使部署程序更容易。如果你打算某天使用DLL,那么只有CRT的DLL版本才有意义。

        2
  •  0
  •   Jim Lamb    14 年前

    实现这一点的最简单方法是创建多个编译相同源代码的项目。你可以为你想要的每种情况都有项目(DLL,静态库)。然后,您可以为这些项目配置多个配置,以便它们可以生成多个变体。

    项目A(DLL)

    • “调试静态”配置-调试,静态CRT->MYLIBDS.DLL
    • “发布静态”配置-发布,静态CRT->MYLIBS.DLL
    • “调试动态”-调试,DLL CRT->MYLIBD.DLL
    • “ReleaseDynamic”-发布,DLL CRT->MYLIB.DLL

    项目B(LIB)

    • “发布静态”配置-发布,静态CRT->MYLIBS.LIB文件
    • “调试动态”-调试,DLL CRT->MYLIBD.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