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