如何在cmake中链接静态库

3

我正在尝试将GLFW链接到我的项目中。这是我的项目结构截图: enter image description here

这是我的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

请将您的代码和错误直接粘贴到问题中。 - Rhathin
这个回答解决了你的问题吗?使用CMake链接GLEW。基本上应该是:target_link_libraries(testo LINK_PUBLIC ${GLEW_LIBRARIES}) - Marek R
将GLFW更改为GLFW_LIBRARIES没有起作用。错误相同。 - 128 bit guy
2个回答

4

这里有一个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})

0

我认为这与Linux将"lib***.a" [前/后]缀添加到库文件名有关。

尝试像使用include_directories()一样,将lib/glfw/lib目录添加到link_directories()中。

此外,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)

这个答案比问题中的解决方案更糟糕(实际上只包含一个打字错误)。你的解决方案是特定于平台的。 - Marek R
它对我不起作用。https://paste.dimdev.org/evayuxaxeg.makefile - 128 bit guy
尝试从 https://www.glfw.org/download.html 安装GLFW二进制文件,然后尝试获取包,如下所示:find_package(glfw3 3.3 REQUIRED),并使用 target_link_libraries(testo glfw) - gkpln3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接