【问题标题】:Build both a Dynamic Library for release and Static Library for GTest构建用于发布的动态库和用于 GTest 的静态库
【发布时间】:2015-12-07 03:48:14
【问题描述】:

我有一个创建动态库的项目,该 dll 将被第三方应用程序使用。

但是要运行 googletests,我需要创建一个静态库,那么如何构建这两种类型的文件呢?

是否有一个构建后事件会创建一个库和一个动态库。

你会建议我如何处理这两种情况,(可能包括我的单元测试中的所有文件而不是链接库)?

【问题讨论】:

  • 为什么不使用在提交时运行单元测试的持续集成系统?
  • 不确定我是否遵循,如果文件是动态库 DLL,这将有什么帮助?我需要在运行测试之前以某种方式更改配置,然后再改回来。
  • 如果 Visual Studio 太难配置,您可以尝试使用 mingw 并使用可配置的传统 makefile 或任何其他传统构建系统。然后使用任何 CI 系统,如 jenkins、hudson、travis-ci、circle-ci 等,并使用make static test; ./test 或类似的工具对其进行测试。我认为您应该能够从命令行调用 msvc,但我实际上从未这样做过,我也不知道。
  • 但要运行 googletests,我需要创建一个静态库 构建静态库通常不仅仅是使用几个不同的命令行开关进行重新编译。您必须确保最终的静态库实际上可以正常工作(甚至正确链接)。使用静态库时,除非您非常小心,否则您可能会因为使用相同代码的多个实例(即函数、变量等)而导致链接器错误,而使用 DLL 则没有问题。
  • @PaulMcKenzie,这可能是对的,但我没有这个问题。我可以在静态库和动态 dll 之间切换。

标签: c++ visual-studio static-linking googletest dynamic-linking


【解决方案1】:

创建 2 个项目。一个静态库和一个 DLL

让他们都添加相同的来源。

也许有特殊的初始化代码(DllMain)

【讨论】:

    【解决方案2】:

    使用此设置进行测试

    项目->属性->配置属性->常规->配置类型->静态库

    此申请

    项目->属性->配置属性->常规->配置类型->动态库

    【讨论】:

    • 当然可以,但我不想一直手动更改设置。我更喜欢一些“自动化”的方式,否则我需要在使用第三方应用程序时一直禁用我的测试,这是我大部分的开发时间。如果/当我记得更改配置类型时,我只会看到测试失败。不太实用。
    • 我认为它比使用复杂的make文件实用得多。我相信你可以制作一个批处理脚本来切换配置,但是切换这个属性需要很少的时间
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多