【问题标题】:Where does <LIBNAME>_EXPORTS comes from?<LIBNAME>_EXPORTS 来自哪里?
【发布时间】:2017-06-15 21:11:30
【问题描述】:

我见过很多MSVC环境下的c++头文件是这样的:

#ifdef somelib_EXPORTS
#define DLLEXPORTS __declspec(dllexport)
#else
#define DLLEXPORTS __declspec(dllimport)
#endif

&lt;libname&gt;_EXPORTS 约定从何而来?

它是 Visual Studio 的默认宏吗?还是由 CMake 生成的?

我找不到有关此约定的任何文档。

【问题讨论】:

  • 它可能是由 Visual Studio 附带的默认项目模板生成的。但这只是惯例——没有其他意义。您可以使用任何您想要的名称。更一般地查看:stackoverflow.com/questions/8863193/…
  • 与 CMake 无关,这个约定在它存在之前就已经在使用了。
  • CMake 文档说 CMake 的默认宏是 LIBNAME_EXPORT cmake.org/cmake/help/v3.0/module/GenerateExportHeader.html 但是很容易更改默认值,否则库可能会在不使用 GenerateExportHeader 的情况下生成类似的标头。

标签: c++ visual-studio dll cmake


【解决方案1】:

_EXPORTS 约定从何而来?

这是通用编码指南,有助于确保 .h 文件在构建 DLL 时以及由 DLL 的用户可以是 #included。

名称DLLEXPORTS 是特定于项目的。它可以由 CMake、qmake 或手动生成。我不认为 Visual Studio 可以生成它们,至少我没有看到。

如果您的项目中有 10 个 DLL,那么您最终将使用 10 个这样的宏。例如,您可能有UTILITY_DLL_EXPORTMESSAGING_DLL_EXPORTKERNEL_DLL_EXPORT 等。

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 2014-04-24
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多