WINDOWS_EXPORT_ALL_SYMBOLS¶
Added in version 3.4.
This property is implemented only for MS-compatible tools on Windows.
Enable this boolean property to automatically create a module definition
(.def
) file with all global symbols found in the input .obj
files
for a SHARED
library (or executable with ENABLE_EXPORTS
)
on Windows. The module definition file will be passed to the linker
causing all symbols to be exported from the .dll
.
This simplifies porting projects to Windows by reducing the need for
explicit dllexport
markup, even in C++
classes. Function
symbols will be automatically exported and may be linked by callers.
However, there are some cases when compiling code in a consumer may
require explicit dllimport
markup:
Global data symbols must be explicitly marked with
__declspec(dllimport)
in order to link to data in the.dll
.In cases that the compiler generates references to the virtual function table, such as in a delegating constructor of a class with virtual functions, the whole class must be marked with
__declspec(dllimport)
in order to link to the vftable in the.dll
.See the MSVC Linker /EXPORT Option for more information on data symbols.
When this property is enabled, zero or more .def
files may also be
specified as source files of the target. The exports named by these files
will be merged with those detected from the object files to generate a
single module definition file to be passed to the linker. This can be
used to export symbols from a .dll
that are not in any of its object
files but are added by the linker from dependencies (e.g. msvcrt.lib
).
This property is initialized by the value of
the CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
variable if it is set
when a target is created.