This was the problem, this Matlab Mexfile has dependencies to a shared library generated in another subdirectory of the build system.

I replace the line

TARGET bookread_exp_matlab

with

OUTPUT ${MPTK_BINARY_DIR}/src/matlab/experimental/bookread_exp.${MEX_EXTENSION}
POST_BUILD

In order to ensure that the shared library is build before the Mexfile, and it work fine.

Thanks.

Benjamin


Brad King a écrit :
Benjamin Roy wrote:
Hello,

I used to build Matlab Mex files using this kind of CMake files, the
build was working Both on linux and Windows (only with visual studio,
because gnumex is no longer support for MinGW and Matlab R2008):

# SET MEX files extension
IF(UNIX)
IF(APPLE)
IF(CMAKE_OSX_ARCHITECTURES MATCHES i386)
SET(MEX_EXTENSION mexmaci)
ELSE(CMAKE_OSX_ARCHITECTURES MATCHES i386)
SET(MEX_EXTENSION mexmac)
ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES i386)
INCLUDE(FindMatlab)
FIND_PROGRAM(MEX_COMPILER mex)
ELSE(APPLE)
SET(MEX_EXTENSION mexglx)
INCLUDE(FindMatlab)
FIND_PROGRAM(MEX_COMPILER mex)
ENDIF(APPLE)
ELSE(UNIX)
IF(WIN32)
IF( CMAKE_CXX_COMPILER STREQUAL "cl")
SET(MEX_EXTENSION mexw32)
INCLUDE(FindMatlab)
FIND_PROGRAM(MEX_COMPILER mex)
MESSAGE("Please set mex compiler with Visual Studio using Matlab command
line and mex -setup command")
ELSE( CMAKE_CXX_COMPILER STREQUAL "cl")
MESSAGE("Matlab Mex files are only supported by MS Visual Studio")
ENDIF( CMAKE_CXX_COMPILER STREQUAL "cl")
ENDIF(WIN32)
ENDIF(UNIX)

IF(MEX_COMPILER)

ADD_CUSTOM_TARGET(bookread_exp_matlab ALL echo
DEPENDS ${MPTK_BINARY_DIR}/src/matlab/experimental/bookread_exp.${MEX_EXTENSION}
 )


ADD_CUSTOM_COMMAND(
  TARGET bookread_exp_matlab
  COMMAND   ${MEX_COMPILER}
  ARGS      -O -DHAVE_FFTW3 -I${MATLAB_INCLUDE_DIR} -I${MPTK_BINARY_DIR}
-I${MPTK_SOURCE_DIR}/src/tinyxml/ -I/usr/include/ -I${MPTK_SOURCE_DIR}
-I${MPTK_SOURCE_DIR}/src/libdsp_windows/
-I${MPTK_SOURCE_DIR}/src/libmptk/
-I${MPTK_SOURCE_DIR}/src/matlab/experimental/classes/
-I${MPTK_SOURCE_DIR}/src/plugin/base/
-I${MPTK_SOURCE_DIR}/src/plugin/contrib/lam/ -I${FFTW3_INCLUDE_DIR}
-I${MPTK_BINARY_DIR}/src/libmptk/
${MPTK_SOURCE_DIR}/src/matlab/experimental/bookread_exp.cpp
${MPTK_SOURCE_DIR}/src/matlab/experimental/classes/mxBook.cpp
-L${MPTK_BINARY_DIR}/lib -lmptk
  COMMENT   "MEX"
)

ENDIF(MEX_COMPILER)

It was working fine till version 2.6.0. But now I ve got a make error:
make[2]: *** No rule to make target `src/matlab/bookread.mexglx', needed
by `src/matlab/CMakeFiles/bookread_matlab'.  Stop.
make[1]: *** [src/matlab/CMakeFiles/bookread_matlab.dir/all] Error 2
make: *** [all] Error 2

Did i miss something basic ? And why such differences in make files
generated by CMake 2.6.0 and CMake 2.4.8 ?

I can't even get the above example to work in 2.4.  It looks like this
is a subdirectory of a larger build system.  Can you reproduce this
problem in a self-contained example please?

If I replace the line

  TARGET bookread_exp_matlab

with

OUTPUT ${MPTK_BINARY_DIR}/src/matlab/experimental/bookread_exp.${MEX_EXTENSION}

then it works in both 2.4 and 2.6.

-Brad



_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to