Exporting Targets¶
BLT provides several built-in targets for commonly used libraries:
mpiAvailable when
ENABLE_MPIisONopenmpAvailable when
ENABLE_OPENMPisONcudaandcuda_runtimeAvailable when
ENABLE_CUDAisONblt_hipandblt_hip_runtimeAvailable when
ENABLE_HIPisON
These targets can be made exportable in order to make them available to users of
your project via CMake’s install() command. Setting BLT’s BLT_EXPORT_THIRDPARTY
option to ON will mark all active targets in the above list as EXPORTABLE
(see the blt_import_library API documentation for more info).
Note
As with other EXPORTABLE targets created by blt_import_library,
these targets should be prefixed with the name of the project. Either the EXPORT_NAME
target property or the NAMESPACE option to CMake’s install
command can be used to modify the name of an installed target.
Note
If a target in your project is added to an export set, any of its dependencies
marked EXPORTABLE must be added to the same export set. Failure to add them will
result in a CMake error in the exporting project.
Note
The recommended usage of the HIP targets is via the blt::hip and
blt::hip_runtime aliases. Alias targets cannot be exported, so the
blt_hip/blt_hip_runtime names can be used for this purpose.
Typical usage of the BLT_EXPORT_THIRDPARTY option is as follows:
# BLT configuration - enable MPI
set(ENABLE_MPI ON CACHE BOOL "")
# and mark the subsequently created MPI target as exportable
set(BLT_EXPORT_THIRDPARTY ON CACHE BOOL "")
# Both of the above must happen before SetupBLT.cmake is included
include(/path/to/SetupBLT.cmake)
# Later, a project might mark a target as dependent on MPI
blt_add_executable( NAME example_1
SOURCES example_1.cpp
DEPENDS_ON blt::mpi )
# Add the example_1 target to the example-targets export set
install(TARGETS example_1 EXPORT example-targets)
# Add BLT's targets to the same export set - this is required
# because the mpi target was marked exportable
blt_export_tpl_targets(EXPORT example-targets)
To avoid collisions with projects that import “example-targets”, it is recommended to provide
a namespace for the mpi target:
blt_export_tpl_targets(EXPORT example-targets NAMESPACE example)
With this approach the example_1 target’s exported name is unchanged - a
project that imports the example-targets export set will have example_1
and example::mpi targets made available. The imported example_1 will
depend on example::mpi.