[CMake] FindMatlab tips?

Ryan Pavlik rpavlik at iastate.edu
Fri Aug 6 16:13:00 EDT 2010


  The alternative to this hardcoding is, if the find module is broken 
for the "standard" system, fix it and submit a patch (a lot are only 
minimally maintained and most are at least outdated stylewise), or if 
you know your lib is in a weird place on your system, append that 
location to CMAKE_PREFIX_PATH when calling cmake, rather than from the 
build.  For matlab, you might consider using my "ProgramFilesGlob.cmake" 
module to avoid specifying a list of directories that will become 
outdated - see 
http://github.com/rpavlik/wiimote-head-tracker-gui/blob/master/cmake/FindParasolid.cmake 
with one module that uses it here: 
http://github.com/rpavlik/wiimote-head-tracker-gui/blob/master/cmake/FindJtTk.cmake

Ryan

On 8/6/10 10:34 AM, Brian Davis wrote:
> Fails miserably on Win32 (XP), Win7 64, Win Server 2008 64 too.  
> You'll find as I have that the "find whatevers" are not all that they 
> are cracked up to be.  CUDA is another example.  find_package should 
> really be named 
> attempt_to_find_package_and_when_you_can't_simply_tell_me_the_vars_to_set( 
> package_name )
>
> I have found that FindWhatevers do not allow for a ordered 
> specification of search directories of where the build spec developer 
> believes them to be on their system.  If you look into these you will 
> see a set of predefined search directories that when things change are 
> not up to date such as C:\\Program Files\\MATLAB\\R2010a, C:\\Program 
> Files\\MATLAB\\R2009b, etc install dirs.
>
> I have been doing the following:
>
> --snip matlab_config.cmake--
> macro( matlab_config )
>
>
>
>     message( "MATLAB_INCLUDE_DIR = ${MATLAB_INCLUDE_DIR}" )
>     #MATLAB_LIBRARIES
>     #MATLAB_MEX_LIBRARY
>     #MATLAB_MX_LIBRARY
>     #MATLAB_ENG_LIBRARY
>
>     if( BUILD_64BIT )
>         set( LIB_DIR win64 )
>         message( "BUILDING FOR 64 bit Windows" )
>
>     else(BUILD_64BIT)
>         set( LIB_DIR win32 )
>         message( "BUILDING FOR 32 bit Windows" )
>
>     endif(BUILD_64BIT)
>
>     SET( MATLAB_ROOT_DIR "C:\\Program Files\\MATLAB\\R2010a" CACHE 
> STRING "" )
>     SET( MATLAB_INCLUDE_DIR "${MATLAB_ROOT_DIR}\\extern\\include" 
> CACHE STRING "" FORCE )
>
>     find_library(MATLAB_LIB_DIR libmx.lib PATHS ${MATLAB_ROOT_DIR} 
> ${MATLAB_ROOT_DIR}/extern/lib/${LIB_DIR}/microsoft )
>     message("MATLAB_LIB_DIR = 
> ${MATLAB_ROOT_DIR}/extern/lib/${LIB_DIR}/microsoft" )
>     message( "MATLAB_LIB_DIR = ${MATLAB_LIB_DIR}" )
>     message( "matlab lib dir = ${MATLAB_ROOT_DIR}/extern/lib/${LIB_DIR}" )
>
>
>     SET( MATLAB_LIBRARIES ${MATLAB_ROOT_DIR}/bin/${LIB_DIR} CACHE 
> STRING "" FORCE )
>     SET( MATLAB_MEX_LIBRARY 
> ${MATLAB_ROOT_DIR}/extern/lib/${LIB_DIR}/microsoft CACHE STRING "" FORCE )
>     SET( MATLAB_MX_LIBRARY 
> ${MATLAB_ROOT_DIR}/extern/lib/${LIB_DIR}/microsoft CACHE STRING "" FORCE )
>     SET( MATLAB_ENG_LIBRARY 
> ${MATLAB_ROOT_DIR}/extern/lib/${LIB_DIR}/microsoft CACHE STRING "" FORCE )
>
>     INCLUDE_DIRECTORIES( ${MATLAB_INCLUDE_DIR} )
>
> endmacro()
>
>
> --end snip--

-- 
Ryan Pavlik
Human-Computer Interaction Graduate Student
Virtual Reality Applications Center
Iowa State University

rpavlik at iastate.edu
http://academic.cleardefinition.com/



More information about the CMake mailing list