在为您编写的应用程序使用或分发库时,我对每个人的实践都很好奇。
首先,在开发应用程序时,您是否链接了库的调试版或发行版? (适用于在调试模式下运行应用程序时)
然后当您在部署之前以发布模式运行应用程序时,您使用了哪些库版本?
如何在库的调试版和发行版之间切换?你手动完成,使用宏,还是其他任何你做的事情?
答案 0 :(得分:3)
我首先要确定库中需要哪些要求:
确定后,您可以为自己或其他图书馆用户所需的每种组合创建配置。
在编译和链接时,保持库和可执行文件与所使用的配置一致是非常重要的,即不要混合版本和放大器。链接时调试。 我知道在Windows / VS平台上,如果调试和放大,这可能会导致细微的内存问题。发布库在可执行文件中混合使用。
正如Brian在Visual Studio中提到的,最好使用Configuration Manager来设置您希望如何构建所需的每个配置。
例如,我们的项目需要以下配置才能使用,具体取决于正在构建的可执行文件。
此特定项目的用户使用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)
将替换当前选定的配置(默认为Debug
或Release
),这允许根据当前正在构建的配置来复制正确的项目。
如果您为项目配置使用常规命名约定,那么它将有所帮助,因为您可以使用$(ConfigurationName)
宏,否则您只需使用固定字符串。
答案 1 :(得分:0)
我使用VS.我这样做的方式是通过项目的引用我需要的库。这基本上只是在项目加载时在什么文件夹中查找特定库。我将我的库开发为尽可能独立于项目或可重用。因此,他们都是自己的项目。因此,对于特定项目所需的库,我创建了一个“3rdParty”或“libs”文件夹,其级别与我的svn文件夹树中的“src”文件夹相同。我倾向于只使用已发布的库,但是当我遇到一些未知问题并希望切换到调试时,我手动复制“lib”文件夹中的文件的调试版本并重新加载项目。
我不确定我应该在我的svn树中保留调试版本和发布版本。虽然因为它们是自己的项目,但将它们保存在另一个项目的svn树中是不对的。它们可以随时重新建造。
然后我想找到一种方法让开关更加......嗯...基本上是自动的,如果你的话,但这不是我真正的意思。只是觉得在发布和调试之间手动切换文件是不对的。也许我还没有找到它,但我想要的是一个可以做的选项: 对于库“stack.dll”,请查看“...... \ 3rdParty”以获取发布,并使用“...... \ 3rdPartyD”进行调试。
任何像我不知道的东西。你有什么建议? 记住库是外部项目。那里建的文件完全在别的地方。实际上可以想到它,因为你需要检查另一个项目,构建它,并复制构建的库,如果你想要另一个副本。你会怎么设置它?