From 7274fd9c1934d617464b752210ff16ee4f3c96fb Mon Sep 17 00:00:00 2001 From: Jamie Snape Date: Thu, 22 Sep 2016 09:09:58 -0400 Subject: [PATCH] FindMatlab: Add EXECUTABLE, MODULE, and SHARED options to matlab_add_mex --- Modules/FindMatlab.cmake | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake index 548d2980b..8b41bb938 100644 --- a/Modules/FindMatlab.cmake +++ b/Modules/FindMatlab.cmake @@ -821,12 +821,13 @@ endfunction() # 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 # 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( # NAME +# [EXECUTABLE | MODULE | SHARED] # SRC src1 [src2 ...] # [OUTPUT_NAME output_name] # [DOCUMENTATION file.txt] @@ -853,6 +854,10 @@ endfunction() # mex file, and with extension `.m`. In that case, typing ``help `` # 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 # format: # @@ -861,7 +866,7 @@ endfunction() # % This is the documentation # function ret = mex_target_output_name(input1) # -function(matlab_add_mex ) +function(matlab_add_mex) if(NOT WIN32) # we do not need all this on Windows @@ -873,6 +878,7 @@ function(matlab_add_mex ) endif() + set(options EXECUTABLE MODULE SHARED) set(oneValueArgs NAME DOCUMENTATION OUTPUT_NAME) set(multiValueArgs LINK_TO SRC) @@ -887,11 +893,25 @@ function(matlab_add_mex ) set(${prefix}_OUTPUT_NAME ${${prefix}_NAME}) endif() - add_library(${${prefix}_NAME} - SHARED + if(${prefix}_EXECUTABLE) + add_executable(${${prefix}_NAME} ${${prefix}_SRC} ${${prefix}_DOCUMENTATION} ${${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}) if(DEFINED Matlab_MX_LIBRARY)