0
我想让CMake在同一个文件夹中找到三个静态库。这是我与挣扎的我的CMakeLists.txt的部分:CMake的find_library()显然没有找到库
# 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_LIB
,OGREOVERLAY_LIB
和OIS_LIB
都设置为NOTFOUND,但如果我尝试打印他们,我觉得他们'设置为预期的路径(即使是选择了后缀名和非后缀名之间的正确路径)。所有图书馆显然都处于预期的道路上。
我在做什么错在这里?
'find_library()'调用的结果被缓存,但如果找不到它,它应该尝试再次找到它。所以在你的测试中你总是从一个空的二进制输出目录开始?在设置你的项目时 - 仍然在测试你的'CMakeLists.txt' - 我建议添加例如''find_library()'调用之前取消设置(OGREMAIN_LIB CACHE)'以强制每次CMake搜索库。 – Florian
'...三个变量OGREMAIN_LIB,OGREOVERLAY_LIB和OIS_LIB都设置为NOTFOUND,但是如果我尝试打印它们,我发现它们被设置为......' - 因此,这些变量是否为-NOTFOUND或设置为某些路径?你如何检查它们(通过'message()',在CMake缓存等)? – Tsyvarev
关于擦除缓存的问题,我在重新加载项目(调用CMake)之前通过CLion的界面执行,但最终在CMake的缓存中设置为 -NOTFOUND(也通过CLion的图形界面进行了检查)。至于打印他们的名字,我在最后的'find_library()'语句之后使用'message(STATUS“路径:$ {OGREMAIN_LIB}”)'(等),并打印预期的路径。 –
pr0gma