使用Debug版本与版本构建管理/使用库

时间:2008-09-05 13:12:18

标签: release-builds debug-build

在为您编写的应用程序使用或分发库时,我对每个人的实践都很好奇。

首先,在开发应用程序时,您是否链接了库的调试版或发行版? (适用于在调试模式下运行应用程序时)

然后当您在部署之前以发布模式运行应用程序时,您使用了哪些库版本?

如何在库的调试版和发行版之间切换?你手动完成,使用宏,还是其他任何你做的事情?

2 个答案:

答案 0 :(得分:3)

我首先要确定库中需要哪些要求:

  1. 调试/发布
  2. Unicode支持
  3. 依旧......
  4. 确定后,您可以为自己或其他图书馆用户所需的每种组合创建配置。

    在编译和链接时,保持库和可执行文件与所使用的配置一致是非常重要的,即不要混合版本和放大器。链接时调试。 我知道在Windows / VS平台上,如果调试和放大,这可能会导致细微的内存问题。发布库在可执行文件中混合使用。

    正如Brian在Visual Studio中提到的,最好使用Configuration Manager来设置您希望如何构建所需的每个配置。

    例如,我们的项目需要以下配置才能使用,具体取决于正在构建的可执行文件。

    1. 调试+的Unicode
    2. 调试+ ASCII
    3. 推出+的Unicode
    4. 推出+ ASCII
    5. 此特定项目的用户使用Configuration Manager将其可执行要求与项目的可用配置相匹配。

      关于宏的使用,它们被广泛用于实现编译时决策,例如,如果要链接函数的调试版本或发布版本。如果您正在使用VS,则可以查看预处理器定义属性以查看如何定义各种宏,例如_DEBUG _RELEASE,这是配置控制编译的方式。

      您使用什么平台编译/链接项目?

      编辑:扩展您更新的评论..

      如果您无法使用 Configuration Manager 选项,那么我建议您使用项目中的以下属性:

      • 链接器 - > 其他库目录链接器 - > 输入

      使用宏$(ConfigurationName)链接相应的库配置,例如调试/发布。

      $(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.lib
      
      • 构建活动自定义构建步骤配置属性

      在构建发生之前(或之后)从依赖项目执行所需库文件的副本。

      xcopy $(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.dll $(IntDir)
      

      $(ProjectDir)将替换当前项目的位置,并导致操作相对于当前项目发生。 宏$(ConfigurationName)将替换当前选定的配置(默认为DebugRelease),这允许根据当前正在构建的配置来复制正确的项目。

      如果您为项目配置使用常规命名约定,那么它将有所帮助,因为您可以使用$(ConfigurationName)宏,否则您只需使用固定字符串。

答案 1 :(得分:0)

我使用VS.我这样做的方式是通过项目的引用我需要的库。这基本上只是在项目加载时在什么文件夹中查找特定库。我将我的库开发为尽可能独立于项目或可重用。因此,他们都是自己的项目。因此,对于特定项目所需的库,我创建了一个“3rdParty”或“libs”文件夹,其级别与我的svn文件夹树中的“src”文件夹相同。我倾向于只使用已发布的库,但是当我遇到一些未知问题并希望切换到调试时,我手动复制“lib”文件夹中的文件的调试版本并重新加载项目。

我不确定我应该在我的svn树中保留调试版本和发布版本。虽然因为它们是自己的项目,但将它们保存在另一个项目的svn树中是不对的。它们可以随时重新建造。

然后我想找到一种方法让开关更加......嗯...基本上是自动的,如果你的话,但这不是我真正的意思。只是觉得在发布和调试之间手动切换文件是不对的。也许我还没有找到它,但我想要的是一个可以做的选项: 对于库“stack.dll”,请查看“...... \ 3rdParty”以获取发布,并使用“...... \ 3rdPartyD”进行调试。

任何像我不知道的东西。你有什么建议? 记住库是外部项目。那里建的文件完全在别的地方。实际上可以想到它,因为你需要检查另一个项目,构建它,并复制构建的库,如果你想要另一个副本。你会怎么设置它?