Cmake连接库目标链接错误

32

你好,我在使用CMake链接Glfw和其他库时遇到了问题。我是通过命令行这样编译的:

g++ main.cpp -lGL -lGLU -lGLEW -lglfw

但是我想使用CMake进行编译。我尝试使用target_link_libraries,但是这会导致错误。

CMakeLists.txt:18出现错误(target_link_libraries):无法为未由该项目构建的目标“GL”指定链接库。

我尝试使用add_definitions来解决问题。我没有看到错误,但是这并没有链接库。

cmake_minimum_required (VERSION 2.6)
project (test)

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

ADD_DEFINITIONS(
    -lGL
    -lGLU
    -lGLEW
    -lglfw
)

add_executable(test.out
    main.cpp
)

target_link_libraries(GL GLU GLEW glfw)

ADD_DEFINITIONS 是用于添加额外的宏定义,而不是库文件,请尝试使用 add_libraries() - πάντα ῥεῖ
未知命令 add_libraries - Luffy
1个回答

64

target_link_libraries 的语法为:

target_link_libraries(your_executable_name libraries_list)

你不需要添加 add_definition 声明 (target_link_libraries 添加了这个选项)。

OpenGL 和 GLEW 软件包还提供了一些有用的变量。

你的 CMakeLists.txt 应该像这样:

cmake_minimum_required (VERSION 2.6)
project (test)

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

include_directories(${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})

add_executable(test
    main.cpp
)

target_link_libraries(test ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES})

记住的一个重要细节是在add_executable(或add_library)行之后放置target_link_libraries


25
重要的细节是将target_link_libraries放在add_executablefind_package这两行代码之后,这样所有链接的组件都能被识别。 - Murphy
如果你正在创建一个库,把它放在 add_library 之后。 - MicroVirus
我该如何确定名称是 PKGNAME_INCLUDE_DIR 还是 PKGNAME_INCLUDE_DIRS? - Gerardo Zinno

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