mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-02 03:39:43 -06:00
FindMatlab: Add imported targets
This commit is contained in:
committed by
Brad King
parent
ce6820fe21
commit
161990b921
4
Help/release/dev/find-matlab-imported-targets.rst
Normal file
4
Help/release/dev/find-matlab-imported-targets.rst
Normal file
@@ -0,0 +1,4 @@
|
||||
find-matlab-imported-targets
|
||||
----------------------------
|
||||
|
||||
* The :module:`FindMatlab` module now provides imported targets.
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
44
Tests/FindMatlab/targets_checks/CMakeLists.txt
Normal file
44
Tests/FindMatlab/targets_checks/CMakeLists.txt
Normal 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
|
||||
)
|
||||
Reference in New Issue
Block a user