WINDOWS_EXPORT_ALL_SYMBOLS¶
3.4 版本新增。
此属性仅针对 Windows 上的 MS 兼容工具实现。
启用此布尔属性以自动为 Windows 上的 SHARED 库(或具有 ENABLE_EXPORTS 的可执行文件)的输入 .obj 文件中找到的所有全局符号创建一个模块定义(.def)文件。模块定义文件将传递给链接器,导致所有符号从 .dll 中导出。
这通过减少对显式 dllexport 标记的需要,简化了将项目移植到 Windows 的过程,即使在 C++ 类中也是如此。函数符号将被自动导出,并且可以被调用方链接。但是,在某些情况下,在使用者中编译代码可能需要显式的 dllimport 标记
全局数据符号必须使用
__declspec(dllimport)进行显式标记,以便链接到.dll中的数据。在编译器生成对虚函数表引用的情况下,例如在具有虚函数的类的委托构造函数中,整个类必须使用
__declspec(dllimport)进行标记,以便链接到.dll中的 vftable。有关数据符号的更多信息,请参阅 MSVC 链接器 /EXPORT 选项。
启用此属性时,零个或多个 .def 文件也可以指定为目标的源文件。这些文件中命名的导出将与从对象文件中检测到的导出合并,以生成单个模块定义文件传递给链接器。这可用于导出 .dll 中不在其任何对象文件中但由链接器从依赖项(例如 msvcrt.lib)添加的符号。
当创建目标时,此属性将由 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 变量的值初始化(如果该变量已设置)。