无法使用find_library命令找到Matlab库

时间:2013-01-07 17:16:36

标签: cmake

我发出以下命令:

find_file(MATLAB_ROOT matlab $ENV{ProgramW6432})
set(MATLAB_LIBS_DIRECTORY ${MATLAB_ROOT}/extern/lib/win64/microsoft)

find_library(MATLAB_MEX_LIB mex
  ${MATLAB_LIBS_DIRECTORY}
)

但它失败了MATLAB_MEX_LIB-NOTFOUND。我的路径似乎正确我可以使用以下命令轻松检索库文件:

find_file(LIB_FILE libmex.lib ${MATLAB_LIBS_DIRECTORY})

我在Windows 7中使用cmake版本2.8.9

2 个答案:

答案 0 :(得分:1)

我发现了问题。我在cmake中使用了--trace选项,发现find_library命令缺少后缀:

SET(CMAKE_FIND_LIBRARY_PREFIXES lib )
SET(CMAKE_FIND_LIBRARY_SUFFIXES .dll.a .a )

所以我把路径改为:

set(MATLAB_LIBS_DIRECTORY ${MATLAB_ROOT}/bin/win64)

并调用以下命令:

set(CMAKE_FIND_LIBRARY_SUFFIXES .dll .dll.a .a)
find_library(MATLAB_MEX_LIB mex
             PATHS ${MATLAB_LIBS_DIRECTORY}
             NO_DEFAULT_PATH
)

这次一切都很顺利。感谢Fraser的支持!

答案 1 :(得分:0)

当您执行find_library时,搜索会在${CMAKE_STATIC_LIBRARY_PREFIX}之前添加每个提供的名称(并附加${CMAKE_STATIC_LIBRARY_SUFFIX})。

在Windows上,${CMAKE_STATIC_LIBRARY_PREFIX}为空;在Unix上它是“lib”,所以你需要在你的搜索名称前面添加“lib”。您可以使用find_library的长版本来涵盖这两种情况:

find_library(MATLAB_MEX_LIB
                NAMES mex libmex
                PATHS ${MATLAB_LIBS_DIRECTORY}
                NO_DEFAULT_PATH  # Avoid searching outside MATLAB_LIBS_DIRECTORY
            )