[Insight-developers] [CMake] Building Matlab Mex extensions that link to ITK?

Bradley Lowekamp blowekamp at mail.nih.gov
Wed Nov 20 08:54:21 EST 2013


Kent,

It appears that you are trying to link of all of ITK. SimpleITK ITK took the approach of producing a library that fully encapsulates ITK. So that a  single shared library could be produced and not depend on ITK. While you could use SimpleITK's library and try to use the infrastructure to customize if for you needs. I doubt that is what you need... ( But it'd be very cool IMO ).

What you may consider is compiling ITK as static and creating a facade interface which only exposes your code and methods you need. This facade interface would be compiled into a self contained shared library. So you only need to link the mex stuff to this library and not all of ITK. Hence just simplify the process by encapsulating ITK.

If you want any further info just let me know.
Brad

On Nov 19, 2013, at 12:59 PM, "Williams, Norman K" <norman-k-williams at uiowa.edu> wrote:

> Has anyone else come up with an elegant solution for this?
> 
> If I want to call ITK from a Matlab MEX extension written in C++, I run
> into problems with telling it the libraries with which to link.
> 
> The ITK_LIBRARIES variable is a list of imported library targets which
> CMake converts to actual library paths when it links a library or
> executable.
> 
> But to compile a MEX file, we're using a custom command along the lines of
> 
>  add_custom_command(OUTPUT ${MEX_PREFIX}.${MATLAB_MEX_EXT}
>                    COMMAND ${MATLAB_MEX_PATH} -cxx
> ${CMAKE_CXX_FLAGS_Release} ${MEX_SRC_PATH}
> ${ITK_INCLUDES} ${ITK_LIBRARIES}
>                    -I${Teem_INCLUDE_DIR} -L${Teem_LIBRARY_DIR}  -lteem
> ${ZLIB_LIBRARY}
>                    DEPENDS ${MEX_SRC_PATH}
>                    IMPLICIT_DEPENDS C ${MEX_SRC_PATH}
>                    COMMENT "BUILDING MEX_FILE: ${MEX_SRC_PATH}" )
> 
> But that doesn't work because CMake gives the target names in
> ITK_LIBRARIES instead of the actual libraries.
> 
> I tried this:
> 
> find_package(ITK NO_MODULE REQUIRED)
> include(${ITK_USE_FILE})
> 
> set(ITK_LOCAL_LIBS)
> foreach(lib ${ITK_LIBRARIES})
> get_target_property(_lib ${lib} IMPORTED_LOCATION)
> 
> list(APPEND ITK_LOCAL_LIBS ${_lib})endforeach()
> 
> But all the IMPORTED_LOCATION for ITK libraries is _lib-NOTFOUND
> 
> 
> 
> --
> Kent Williams norman-k-williams at uiowa.edu
> 
> 
> 
> 
> 
> 
> ________________________________
> Notice: This UI Health Care e-mail (including attachments) is covered by the Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and may be legally privileged.  If you are not the intended recipient, you are hereby notified that any retention, dissemination, distribution, or copying of this communication is strictly prohibited.  Please reply to the sender that you have received the message in error, then delete it.  Thank you.
> ________________________________
> --
> 
> Powered by www.kitware.com
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
> 
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
> 
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake



More information about the Insight-developers mailing list