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