管理/使用具有调试版本和发布版本的库

问题描述:

当您为编写的应用程序使用或分发库时,我很好奇每个人的做法。管理/使用具有调试版本和发布版本的库

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

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

如何执行您的调试和发布版本的库之间的切换?你是手工做的吗,你使用宏还是其他什么?

我会首先确定从库中需要什么样的要求:

  1. 调试/发布
  2. Unicode支持
  3. 等等..

有了这决定你可以再为您或其他图书馆用户所需的每种组合创建配置。

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

正如Brian向Visual Studio提及的那样,最好使用配置管理器来设置您希望如何构建每个配置。

例如,根据所构建的可执行文件,我们的项目需要以下配置才可用。

  1. 调试+统一
  2. 调试+ ASCII
  3. 发行+的Unicode
  4. 发行+ ASCII

这个特殊项目的用户使用配置管理器,以满足他们与可执行的需求项目的可用配置。

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

你使用什么平台来编译/链接你的项目?

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

如果配置管理器选项不可用,给你那么我建议使用来自以下项目的性质:

  • 链接 - >附加库目录链接 - >输入

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

$(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.lib 
  • 生成事件自定义生成步骤配置属性

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

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

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

如果您对项目配置使用常规命名约定,将会有所帮助,因为您可以使用$(ConfigurationName)宏,否则您可以简单地使用固定字符串。

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

我不确定我应该保持调试和发布版本在我的svn树。虽然他们是他们自己的项目,但将他们保留在另一个项目的svn树中是不对的。在任何时候都可以再次建造它们。

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

任何那些像我不知道的东西。你有什么建议?记忆库是外部项目。那里建立的文件完全是其他地方。事实上认为它是因为你必须签出另一个项目,构建它,并且复制构建的库,如果你想要另一个副本。你如何设定?