首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从同一个项目构建DLL和静态库

从同一个项目构建DLL和静态库
EN

Stack Overflow用户
提问于 2018-05-29 00:34:05
回答 2查看 0关注 0票数 0

我有许多本机C ++库(Win32,没有MFC)在Visual Studio 2005下编译,并用于许多解决方案。

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

什么是最好的方法来做到这一点?我考虑过这些方法:

1.多个项目文件

  • 例如:“foo_static.vcproj”vs“foo_dll.vcproj”
  • Pro:易于为新库生成,不需要太多的手动vcproj扫描。
  • Con:两个地方的设置,文件列表等都很容易失去同步。

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

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

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

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

编辑:如果有人提出它,我也尝试了一个更“聪明”的#3版本,其中我定义了一个.vsprops,其中包含一个名为“ModuleConfigurationType”的UserMacro,其值为“2”(DLL)或“ 4“(静态库),并将.vcproj中的配置更改为具有ConfigurationType="$(ModuleConfigurationType)"。Visual Studio以静默方式并且没有警告地移除该属性并将其替换ConfigurationType="1"。非常有帮助!

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

EN

Stack Overflow用户

发布于 2018-05-29 09:30:35

我可能错过了一些东西,但是为什么你不能定义没有文件的DLL项目,并让它链接由另一个项目创建的lib。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档