CMake FIND_LIBRARY返回错误的路径

时间:2013-04-29 11:47:45

标签: cmake

在我的项目中,我使用了差异第3个库,它已经预构建并添加到external-debs子目录中。我使用多个FindXXX CMake脚本来找到这些要求。

当我尝试找到一个FreeImage预建时,CMake成功找到了库,但总是返回错误的路径lib / libfreeimage.a而不是./external-debs/freeimage/lib/windows/x64/libfreeimage.a

这是我的搜索操作:

FIND_LIBRARY(FREE_IMAGE_LIBRARY 
             NAMES ${LIB_PREFIX}freeimage.${LIB_POSTFIX}
             HINTS ${FREE_IMAGE_LIBRARY_DIR}
)

这是我的预定:

# Determine platform architecture
IF (CMAKE_SIZEOF_VOID_P EQUAL 8 )
  SET(ARCHITECTURE "x64")
ELSE()
  SET(ARCHITECTURE "x86")
ENDIF()

#Determine platform specific include and library 
#paths settings.
IF (WIN32)
   IF (MINGW)
      SET (LIB_PREFIX "lib")
      SET (LIB_POSTFIX "a")
   ELSEIF (MSVC)
      SET (LIB_POSTFIX "lib")
   ENDIF(MINGW)   

   SET (PLATFORM "windows")   
ELSE (UNIX)
   SET (LIB_PREFIX "lib")
   SET (LIB_POSTFIX "a")
   SET (PLATFORM "linux") 
ENDIF (WIN32)

SET(FREE_IMAGE_INCLUDE_DIR  ${CMAKE_SOURCE_DIR}/external-deps/freeimage/include) 
SET(FREE_IMAGE_LIBRARY_DIR  ${CMAKE_SOURCE_DIR}/external-deps/freeimage/lib/${PLATFORM}/${ARCHITECTURE})

我使用相同的代码来查找位于相同external-deps子文件夹中的其他预构建第3个库依赖项(jsoncpp),没有任何问题。

Execute: FindJSON.cmake
-- [INFO]: Find JSON include: ./external-deps/jsoncpp/include
-- [INFO]: Find JSON lib: ./external-deps/jsoncpp/lib/windows/x64/libjsoncpp.a
Execute: FindFreeImage.cmake
-- [INFO]: Find FreeImage include: ./external-deps/freeimage/include
-- [INFO]: Find FreeImage lib: /lib/libfreeimage.a

我在Windows平台上使用CMake 2.8.x. 有谁知道为什么CMake有时会返回错误的库路径?

1 个答案:

答案 0 :(得分:4)

看起来CMake已经在你的MinGW环境中找到了另一个库的安装。这可能是误报。

如果要强制CMake使用特定目录中的库,请使用NO_DEFAULT_PATH

FIND_LIBRARY(FREE_IMAGE_LIBRARY 
         NAMES ${LIB_PREFIX}freeimage.${LIB_POSTFIX}
         HINTS ${FREE_IMAGE_LIBRARY_DIR}
         NO_DEFAULT_PATH
)

查看CMake command reference,了解推动find_library中路径解析的细微规则。