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