FindMatlab: Add EXECUTABLE, MODULE, and SHARED options to matlab_add_mex

This commit is contained in:
Jamie Snape 2016-09-22 09:09:58 -04:00 committed by Brad King
parent ccd1341ac9
commit 7274fd9c19
1 changed files with 24 additions and 4 deletions

View File

@ -821,12 +821,13 @@ endfunction()
# order to produce a MEX file. The final name of the produced output may be # order to produce a MEX file. The final name of the produced output may be
# specified, as well as additional link libraries, and a documentation entry # specified, as well as additional link libraries, and a documentation entry
# for the MEX file. Remaining arguments of the call are passed to the # for the MEX file. Remaining arguments of the call are passed to the
# :command:`add_library` command. # :command:`add_library` or :command:`add_executable` command.
# #
# :: # ::
# #
# matlab_add_mex( # matlab_add_mex(
# NAME <name> # NAME <name>
# [EXECUTABLE | MODULE | SHARED]
# SRC src1 [src2 ...] # SRC src1 [src2 ...]
# [OUTPUT_NAME output_name] # [OUTPUT_NAME output_name]
# [DOCUMENTATION file.txt] # [DOCUMENTATION file.txt]
@ -853,6 +854,10 @@ endfunction()
# mex file, and with extension `.m`. In that case, typing ``help <name>`` # mex file, and with extension `.m`. In that case, typing ``help <name>``
# in Matlab prints the documentation contained in this file. # in Matlab prints the documentation contained in this file.
# #
# ``MODULE`` or ``SHARED`` may be given to specify the type of library to be
# created. ``EXECUTABLE`` may be given to create an executable instead of
# a library. If no type is given explicitly, the type is ``SHARED``.
#
# The documentation file is not processed and should be in the following # The documentation file is not processed and should be in the following
# format: # format:
# #
@ -861,7 +866,7 @@ endfunction()
# % This is the documentation # % This is the documentation
# function ret = mex_target_output_name(input1) # function ret = mex_target_output_name(input1)
# #
function(matlab_add_mex ) function(matlab_add_mex)
if(NOT WIN32) if(NOT WIN32)
# we do not need all this on Windows # we do not need all this on Windows
@ -873,6 +878,7 @@ function(matlab_add_mex )
endif() endif()
set(options EXECUTABLE MODULE SHARED)
set(oneValueArgs NAME DOCUMENTATION OUTPUT_NAME) set(oneValueArgs NAME DOCUMENTATION OUTPUT_NAME)
set(multiValueArgs LINK_TO SRC) set(multiValueArgs LINK_TO SRC)
@ -887,11 +893,25 @@ function(matlab_add_mex )
set(${prefix}_OUTPUT_NAME ${${prefix}_NAME}) set(${prefix}_OUTPUT_NAME ${${prefix}_NAME})
endif() endif()
add_library(${${prefix}_NAME} if(${prefix}_EXECUTABLE)
SHARED add_executable(${${prefix}_NAME}
${${prefix}_SRC} ${${prefix}_SRC}
${${prefix}_DOCUMENTATION} ${${prefix}_DOCUMENTATION}
${${prefix}_UNPARSED_ARGUMENTS}) ${${prefix}_UNPARSED_ARGUMENTS})
else()
if(${prefix}_MODULE)
set(type MODULE)
else()
set(type SHARED)
endif()
add_library(${${prefix}_NAME}
${type}
${${prefix}_SRC}
${${prefix}_DOCUMENTATION}
${${prefix}_UNPARSED_ARGUMENTS})
endif()
target_include_directories(${${prefix}_NAME} PRIVATE ${Matlab_INCLUDE_DIRS}) target_include_directories(${${prefix}_NAME} PRIVATE ${Matlab_INCLUDE_DIRS})
if(DEFINED Matlab_MX_LIBRARY) if(DEFINED Matlab_MX_LIBRARY)