FindMatlab: Add imported targets

This commit is contained in:
Silvio Traversaro
2021-08-28 12:12:09 +02:00
committed by Brad King
parent ce6820fe21
commit 161990b921
4 changed files with 103 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
find-matlab-imported-targets
----------------------------
* The :module:`FindMatlab` module now provides imported targets.

View File

@@ -93,6 +93,33 @@ behavior:
additional versions of Matlab for the automatic retrieval of the installed
versions.
Imported targets
^^^^^^^^^^^^^^^^
.. versionadded:: 3.22
This module defines the following :prop_tgt:`IMPORTED` targets:
``Matlab::mex``
The ``mex`` library, always available.
``Matlab::mx``
The mx library of Matlab (arrays), always available.
``Matlab::eng``
Matlab engine library. Available only if the ``ENG_LIBRARY`` component
is requested.
``Matlab::mat``
Matlab matrix library. Available only if the ``MAT_LIBRARY`` component
is requested.
``Matlab::MatlabEngine``
Matlab C++ engine library, always available for R2018a and newer.
``Matlab::MatlabDataArray``
Matlab C++ data array library, always available for R2018a and newer.
Variables defined by the module
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -1865,6 +1892,32 @@ if(Matlab_DATAARRAY_LIBRARY)
list(APPEND Matlab_LIBRARIES ${Matlab_DATAARRAY_LIBRARY})
endif()
# internal
# This small stub permits to add imported targets for the found MATLAB libraries
function(_Matlab_add_imported_target _matlab_library_variable_name _matlab_library_target_name)
if(Matlab_${_matlab_library_variable_name}_LIBRARY)
if(NOT TARGET Matlab::${_matlab_library_target_name})
add_library(Matlab::${_matlab_library_target_name} UNKNOWN IMPORTED)
set_target_properties(Matlab::${_matlab_library_target_name} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Matlab_INCLUDE_DIRS}"
IMPORTED_LOCATION "${Matlab_${_matlab_library_variable_name}_LIBRARY}")
if(_matlab_library_target_name STREQUAL "mex" OR
_matlab_library_target_name STREQUAL "eng" OR
_matlab_library_target_name STREQUAL "mat")
set_target_properties(Matlab::${_matlab_library_target_name} PROPERTIES
INTERFACE_LINK_LIBRARIES Matlab::mx)
endif()
endif()
endif()
endfunction()
_Matlab_add_imported_target(MX mx)
_Matlab_add_imported_target(MEX mex)
_Matlab_add_imported_target(ENG eng)
_Matlab_add_imported_target(MAT mat)
_Matlab_add_imported_target(ENGINE MatlabEngine)
_Matlab_add_imported_target(DATAARRAY MatlabDataArray)
find_package_handle_standard_args(
Matlab
FOUND_VAR Matlab_FOUND

View File

@@ -1551,6 +1551,8 @@ if(BUILD_TESTING)
ADD_TEST_MACRO(FindMatlab.failure_reports ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>)
set(FindMatlab.r2018a_check_BUILD_OPTIONS ${FindMatlab_additional_test_options})
ADD_TEST_MACRO(FindMatlab.r2018a_check ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>)
set(FindMatlab.targets_checks_BUILD_OPTIONS ${FindMatlab_additional_test_options})
ADD_TEST_MACRO(FindMatlab.targets_checks ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>)
endif()
add_test(ExternalProject ${CMAKE_CTEST_COMMAND}

View File

@@ -0,0 +1,44 @@
cmake_minimum_required (VERSION 2.8.12)
enable_testing()
project(targets_checks)
set(MATLAB_FIND_DEBUG TRUE)
if(NOT "${MCR_ROOT}" STREQUAL "")
set(Matlab_ROOT_DIR "${MCR_ROOT}")
if(NOT EXISTS "${MCR_ROOT}")
message(FATAL_ERROR "MCR does not exist ${MCR_ROOT}")
endif()
endif()
# the success of the following command is dependent on the current configuration:
# - on 32bits builds (cmake is building with 32 bits), it looks for 32 bits Matlab
# - on 64bits builds (cmake is building with 64 bits), it looks for 64 bits Matlab
find_package(Matlab REQUIRED COMPONENTS ENG_LIBRARY MAT_LIBRARY
OPTIONAL_COMPONENTS MAIN_PROGRAM)
if(NOT TARGET Matlab::mx)
message(FATAL_ERROR "Matlab::mx target does not exist")
endif()
if(NOT TARGET Matlab::mex)
message(FATAL_ERROR "Matlab::mex target does not exist")
endif()
if(NOT TARGET Matlab::eng)
message(FATAL_ERROR "Matlab::eng target does not exist")
endif()
if(NOT TARGET Matlab::mat)
message(FATAL_ERROR "Matlab::mat target does not exist")
endif()
matlab_add_mex(
# target name
NAME cmake_matlab_test_wrapper1
# output name
OUTPUT_NAME cmake_matlab_mex1
SRC ${CMAKE_CURRENT_SOURCE_DIR}/../matlab_wrapper1.cpp
DOCUMENTATION ${CMAKE_CURRENT_SOURCE_DIR}/../help_text1.m.txt
LINK_TO Matlab::mex
)