|
|
|
ENABLE_EXPORTS
|
|
|
|
--------------
|
|
|
|
|
|
|
|
Specify whether an executable or a shared library exports symbols.
|
|
|
|
|
|
|
|
Normally an executable does not export any symbols because it is the
|
|
|
|
final program. It is possible for an executable to export symbols to
|
|
|
|
be used by loadable modules. When this property is set to true CMake
|
|
|
|
will allow other targets to "link" to the executable with the
|
|
|
|
:command:`target_link_libraries` command. On all platforms a target-level
|
|
|
|
dependency on the executable is created for targets that link to it.
|
|
|
|
Handling of the executable on the link lines of the loadable modules
|
|
|
|
varies by platform:
|
|
|
|
|
|
|
|
* On Windows-based systems (including Cygwin) an "import library" is
|
|
|
|
created along with the executable to list the exported symbols.
|
|
|
|
Loadable modules link to the import library to get the symbols.
|
|
|
|
|
|
|
|
* On macOS, loadable modules link to the executable itself using the
|
|
|
|
``-bundle_loader`` flag.
|
|
|
|
|
|
|
|
* On AIX, a linker "import file" is created along with the executable
|
|
|
|
to list the exported symbols for import when linking other targets.
|
|
|
|
Loadable modules link to the import file to get the symbols.
|
|
|
|
|
|
|
|
* On other platforms, loadable modules are simply linked without
|
|
|
|
referencing the executable since the dynamic loader will
|
|
|
|
automatically bind symbols when the module is loaded.
|
|
|
|
|
|
|
|
This property is initialized by the value of the
|
|
|
|
:variable:`CMAKE_EXECUTABLE_ENABLE_EXPORTS` variable, if it is set when an
|
|
|
|
executable target is created. If :variable:`CMAKE_EXECUTABLE_ENABLE_EXPORTS`
|
|
|
|
is not set, the :variable:`CMAKE_ENABLE_EXPORTS` variable is used to initialize
|
|
|
|
the property instead for backward compatibility reasons.
|
|
|
|
See below for alternative initialization behavior for shared library targets.
|
|
|
|
|
|
|
|
.. versionadded:: 3.27
|
|
|
|
On Apple platforms, to link with a shared library (either a bare library or a
|
|
|
|
framework), a linker import file can be used instead of the actual shared
|
|
|
|
library. These linker import files are also known as text-based stubs, and
|
|
|
|
they have a ``.tbd`` file extension.
|
|
|
|
|
|
|
|
The generation of these linker import files, as well as their consumption, is
|
|
|
|
controlled by this property. When this property is set to true on a shared
|
|
|
|
library target, CMake will generate a ``.tbd`` file for the library.
|
|
|
|
Other targets that link to the shared library target will then use this
|
|
|
|
``.tbd`` file when linking rather than linking to the shared library binary.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
For backward compatibility reasons, this property will be ignored if the
|
|
|
|
:prop_tgt:`XCODE_ATTRIBUTE_GENERATE_TEXT_BASED_STUBS <XCODE_ATTRIBUTE_<an-attribute>>`
|
|
|
|
target property or the
|
|
|
|
:variable:`CMAKE_XCODE_ATTRIBUTE_GENERATE_TEXT_BASED_STUBS <CMAKE_XCODE_ATTRIBUTE_<an-attribute>>`
|
|
|
|
variable is set to false.
|
|
|
|
|
|
|
|
For shared library targets, this property is initialized by the value of the
|
|
|
|
:variable:`CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS` variable, if it is set when
|
|
|
|
the target is created.
|