簡體   English   中英

如何在cmake中鏈接靜態庫

[英]How to link static libraries in cmake

我正在嘗試在我的項目中鏈接 GLFW。 有我的項目結構的截圖: 在此處輸入圖片說明

這是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)
project(testo)

set(CMAKE_CXX_STANDARD 17)

add_executable(testo main.cpp)
add_library(glfw3 STATIC main.cpp)

include_directories(lib/glfw/include/)

find_library(GLFW glfw3 lib/glfw/lib)
target_link_libraries(testo LINK_PUBLIC ${GLFW})

然而,當我嘗試在 clion 中運行項目時,它給了我錯誤:

====================[ Build | testo | Debug ]===================================
"C:\Program Files\JetBrains\CLion 2019.2.5\bin\cmake\win\bin\cmake.exe" --build C:\Users\Student\testo\cmake-build-debug --target testo -- -j 2
[ 50%] Linking CXX executable testo.exe
CMakeFiles\testo.dir/objects.a(main.cpp.obj): In function `main':
C:/Users/Student/testo/main.cpp:5: undefined reference to `glfwInit'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\testo.dir\build.make:87: testo.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:77: CMakeFiles/testo.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:84: CMakeFiles/testo.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:117: testo] Error 2

這是一些github 示例
這是您正在復制的一些 SO 問題

基於此,這應該是這樣的:

cmake_minimum_required(VERSION 3.15)
project(testo)

set(CMAKE_CXX_STANDARD 17)

find_package(GLEW REQUIRED)

add_executable(testo main.cpp)
target_link_libraries(testo PUBLIC ${GLEW_LIBRARIES})
target_include_directories(testo PUBLIC ${GLEW_INCLUDE_DIRS})

我認為這與 linux 將"lib***.a" [pre/post] 修復程序添加到 lib 文件名有關。

嘗試將您的lib/glfw/lib目錄添加到您的link_directories() ,就像您對include_dicrectories()所做的一樣。

此外, add_library()指定您正在嘗試自己編譯glfw3 ,但您嘗試做的只是與其鏈接。 我已經為你刪除了。

cmake_minimum_required(VERSION 3.15)
project(testo)

set(CMAKE_CXX_STANDARD 17)

add_executable(testo main.cpp)

include_directories(lib/glfw/include/)
link_directories(lib/glfw/lib)

target_link_libraries(testo LINK_PUBLIC glfw3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM