gpt4 book ai didi

CMake FIND_LIBRARY 返回错误的路径

转载 作者:行者123 更新时间:2023-12-01 12:45:38 29 4
gpt4 key购买 nike

在我的项目中,我使用了 differend 3rd 库,这些库已经预先构建并添加到 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 子文件夹中的另一个预构建的第三个库依赖项 (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 有时会返回错误的库路径?

最佳答案

看起来 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 中路径解析的微妙规则。

关于CMake FIND_LIBRARY 返回错误的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16277902/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com