gpt4 book ai didi

c++ - 从同一个项目构建 DLL 和静态库

转载 作者:IT老高 更新时间:2023-10-28 21:53:15 25 4
gpt4 key购买 nike

我有许多在 Visual Studio 2005 下编译的 native C++ 库(Win32,没有 MFC),并在许多解决方案中使用。

我希望能够选择将它们编译和链接为静态库或 DLL,具体取决于我使用它们的特定解决方案的需要。

最好的方法是什么?我考虑过这些方法:

1。多个项目文件

  • 示例:“foo_static.vcproj”与“foo_dll.vcproj”
  • 专业版:易于为新库生成,无需太多手动 vcproj 修改。
  • 缺点:两个地方的设置、文件列表等太容易不同步了。

2。单个项目文件,多种配置

  • 示例:“Debug | Win32”与“Debug DLL | Win32”等
  • 专业版:文件列表更容易保持同步;编译选项更容易保持同步
  • Con:我为 Win32 和智能设备目标构建,所以我已经有多种配置;我不想让我的组合爆炸变得更糟(“FooPhone 的静态库 | WinMobile 6”、“FooPhone 的动态库 | WinMobile 6”、“BarPda 的静态库 | WinMobile 6”等。
  • 更糟糕的骗局:VS 2005 有一个坏习惯,即假设如果您为平台“Foo”定义了配置,那么您的解决方案中的所有其他平台确实需要它,并且随意插入配置/平台配置的所有排列所有受影响的 vcproj 文件,无论是否有效。 (向 MS 提交的错误;作为 WONTFIX 关闭。)

3。单个项目文件,通过 vsprops 文件选择静态或动态

  • 示例:将适当的 vcproj 片段存储在属性表文件中,然后在需要静态库时将“FooApp 静态库”属性表应用于配置/平台组合,并在需要 DLL 时应用“FooApp DLL”属性表。
  • 优点:这是我真正想做的事!
  • 缺点:似乎不可能。 .vsprops 似乎无法覆盖在静态库和动态库之间切换的 .vcproj 属性(Configuration 元素的 ConfigurationType 属性)文件。 Microsoft 为这些文件发布的架构仅列出 元素。

编辑:如果有人提出建议,我还尝试了 #3 的更“聪明”版本,其中我定义了一个 .vsprops,其中包含一个名为“ModuleConfigurationType”的 UserMacro,其值为“2”(DLL)或“4”(静态库),并将 .vcproj 中的配置更改为具有 ConfigurationType="$(ModuleConfigurationType)"。 Visual Studio 无提示地删除该属性并将其替换为 ConfigurationType="1"。太有帮助了!

我错过了更好的解决方案吗?

最佳答案

我可能遗漏了一些东西,但是为什么你不能定义没有文件的 DLL 项目,而只是让它链接另一个项目创建的 lib?而且,关于设置,您可以将它们分解到 vsprop 文件中...

关于c++ - 从同一个项目构建 DLL 和静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com