| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- It must contain two elements.
- ::
- <PREFIX> <SUFFIX>
- ``<PREFIX>`` and ``<SUFFIX>`` will be used to encapsulate the list of
- libraries.
- For the elements of this variable, the ``LINKER:`` prefix can be used:
- .. include:: ../command/LINK_OPTIONS_LINKER.txt
- :start-line: 3
- Examples
- ^^^^^^^^
- Solving cross-references between two static libraries
- """""""""""""""""""""""""""""""""""""""""""""""""""""
- A common need is the capability to search repeatedly in a group of static
- libraries until no new undefined references are created. This capability is
- offered by different environments but with a specific syntax:
- .. code-block:: cmake
- set(CMAKE_C_LINK_GROUP_USING_cross_refs_SUPPORTED TRUE)
- if(CMAKE_C_COMPILER_ID STREQUAL "GNU"
- AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
- set(CMAKE_C_LINK_GROUP_USING_cross_refs "LINKER:--start-group"
- "LINKER:--end-group")
- elseif(CMAKE_C_COMPILER_ID STREQUAL "SunPro"
- AND CMAKE_SYSTEM_NAME STREQUAL "SunOS")
- set(CMAKE_C_LINK_GROUP_USING_cross_refs "LINKER:-z,rescan-start"
- "LINKER:-z,rescan-end")
- else()
- # feature not yet supported for the other environments
- set(CMAKE_C_LINK_GROUP_USING_cross_refs_SUPPORTED FALSE)
- endif()
- add_library(lib1 STATIC ...)
- add_library(lib3 SHARED ...)
- if(CMAKE_C_LINK_GROUP_USING_cross_refs_SUPPORTED)
- target_link_libraries(lib3 PRIVATE "$<LINK_GROUP:cross_refs,lib1,external>")
- else()
- target_link_libraries(lib3 PRIVATE lib1 external)
- endif()
- CMake will generate the following link expressions:
- * ``GNU``: ``-Wl,--start-group /path/to/lib1.a -lexternal -Wl,--end-group``
- * ``SunPro``: ``-Wl,-z,rescan-start /path/to/lib1.a -lexternal -Wl,-z,rescan-end``
|