Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake';s find_library()显然没有';找不到图书馆_C++_Cmake_Libraries_Ogre - Fatal编程技术网

C++ CMake';s find_library()显然没有';找不到图书馆

C++ CMake';s find_library()显然没有';找不到图书馆,c++,cmake,libraries,ogre,C++,Cmake,Libraries,Ogre,我希望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_BU

我希望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_LIB
OGREOVERLAY_LIB
OIS_LIB
都设置为NOTFOUND,但如果我尝试打印它们,我发现它们被设置为预期路径(甚至选择了后缀名和非后缀名之间的正确路径)。显然,所有库实际上都在预期的路径中


我做错了什么?

添加${CMAKE\u SHARED\u LIBRARY\u PREFIX}和${CMAKE\u SHARED\u LIBRARY\u 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}")

find_library()
调用的结果会被缓存,但如果找不到,它应该再次尝试查找。那么在测试期间,您是否总是从空的二进制输出目录开始?在项目设置过程中-虽然仍在测试
CMakeLists.txt
-我建议在
find_library()
调用之前添加例如
unset(OGREMAIN_LIB CACHE)
,以强制CMake每次搜索库。
。。。三个变量ogrestain_LIB、OGREOVERLAY_LIB和OIS_LIB都设置为NOTFOUND,但是如果我尝试打印它们,我发现它们被设置了…
-那么,这些变量是
-NOTFOUND
还是设置为某个路径?如何检查它们(通过CMake缓存中的
message()
,等等)?关于擦除缓存的问题,我在重新加载项目(调用CMake)之前通过CLion的界面进行检查,但它们最终在CMake缓存中设置为-NOTFOUND(也通过CLion的图形界面进行检查)。至于打印他们的名字,我在最后一个
find_library()
语句之后使用
message(状态“path:${ogresiste_LIB}”)
(等等),然后打印期望的路径。