【问题标题】:CMake's find_library() apparently doesn't locate librariesCMake 的 find_library() 显然没有找到库
【发布时间】:2017-03-20 22:24:15
【问题描述】:

我希望 CMake 在同一个文件夹中找到三个静态库。这是我正在努力解决的 CMakeLists.txt 的一部分:

# Dependencies' directories
set(OGRE3D_DIR "D:/Data/Libs/ogre3D-1.10")

# Required libraries
find_library(OGREMAIN_LIB
        NAMES OgreMain OgreMain_d
        HINTS "${OGRE3D_DIR}/lib/${CMAKE_BUILD_TYPE}")

find_library(OGREOVERLAY_LIB
        NAMES OgreOverlay OgreOverlay_d
        HINTS "${OGRE3D_DIR}/lib/${CMAKE_BUILD_TYPE}")

find_library(OIS_LIB
        NAMES OIS OIS_d
        HINTS "${OGRE3D_DIR}/lib/${CMAKE_BUILD_TYPE}")

# Target
add_executable(Test Main.cpp)

# Library linking
target_link_libraries(Test
        ${OGREMAIN_LIB}
        ${OGREOVERLAY_LIB}
        ${OIS_LIB})

由于某种原因,OGREMAIN_LIBOGREOVERLAY_LIBOIS_LIB 三个变量都设置为 NOTFOUND,但如果我尝试打印它们,我发现它们被设置为预期的路径(即使是正确的带后缀和不带后缀的名字被选中)。所有库显然实际上都在预期的路径中。

我在这里做错了什么?

【问题讨论】:

  • find_library()调用的结果被缓存了,但是如果没有找到它应该尝试再次找到它。所以在你的测试过程中,你总是从一个空的二进制输出目录开始吗?在您的项目设置期间 - 在仍在测试您的 CMakeLists.txt 时 - 我建议添加例如unset(OGREMAIN_LIB CACHE)find_library() 调用之前强制 CMake 每次搜索库。
  • ... the three variables OGREMAIN_LIB, OGREOVERLAY_LIB and OIS_LIB are all set to NOTFOUND, but if I try to print them I find they're set ... - 那么,这些变量是-NOTFOUND 还是设置为某个路径?你如何检查它们(通过message(),在 CMake 缓存中等)?
  • 对于擦除缓存的问题,我在重新加载项目(调用 CMake)之前通过 CLion 的界面执行此操作,但它们最终在 CMake 的缓存中设置为 -NOTFOUND(也通过CLion 的图形界面)。至于打印他们的名字,我在最后一个find_library() 语句之后使用message(STATUS "path: ${OGREMAIN_LIB}")(等),并打印出预期的路径。
  • 回复:“我在这里做错了什么?” -- 我希望你没有使用 Visual Studio 生成器,因为从多配置生成器中读取 CMAKE_BUILD_TYPE 是无效的。您必须在导入的目标上设置 IMPORTED_LOCATION_<CFG> 属性。
  • 另外,Ogre3D(甚至是 1.10)包括一个 CMake 包配置脚本。使用它肯定会比尝试手动完成所有事情更好! ogrecave.github.io/ogre/api/1.10/setup.html

标签: c++ cmake libraries ogre


【解决方案1】:

像这样添加 ${CMAKE_SHARED_LIBRARY_PREFIX} 和 ${CMAKE_SHARED_LIBRARY_SUFFIX} 怎么样:

find_library(OGREMAIN_LIB
    NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}OgreMain${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_SHARED_LIBRARY_PREFIX}OgreMain_d${CMAKE_SHARED_LIBRARY_SUFFIX}
    HINTS "${OGRE3D_LIB_DIR}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多