我以前将Visual Studio与NuGet一起用于所有软件包。现在我换成CMake。
现在,我正在使用vcpkg来管理图书馆。
但是,我需要OpenGl
Cmake链接freeglut,glew,glm,libpng,zlib的命令由vcpkg提供。但不是OpenGL。
cmake_minimum_required(VERSION 3.0)
project(little_plane)
set(CMAKE_CXX_STANDARD 14)
add_executable(little_plane main.cpp)
# ./vcpkg install freeglut
find_package(GLUT REQUIRED)
target_link_libraries(little_plane PRIVATE GLUT::GLUT)
## ./vcpkg install glew
#find_package(GLEW REQUIRED)
#target_link_libraries(little_plane PRIVATE GLEW::GLEW)
#
# glm
find_package(glm CONFIG REQUIRED)
target_link_libraries(little_plane PRIVATE glm)
# ./vcpkg install libpng
find_package(PNG REQUIRED)
target_link_libraries(little_plane PRIVATE PNG::PNG)
##
find_package(ZLIB REQUIRED)
target_link_libraries(little_plane PRIVATE ZLIB::ZLIB)
find_package(OpenGL REQUIRED)
if (OPENGL_FOUND)
message("opengl found")
message("include dir: ${OPENGL_INCLUDE_DIR}")
message("link libraries: ${OPENGL_gl_LIBRARY}")
else (OPENGL_FOUND)
message("opengl not found")
endif()
target_link_libraries(little_plane ${OPENGL_gl_LIBRARY})
find_package(glfw3 CONFIG REQUIRED)
target_link_libraries(little_plane PRIVATE glfw)
使用上面的CMakeLists.txt,我运行cmake .
opengl found
include dir: /usr/include
link libraries: /usr/lib/x86_64-linux-gnu/libGL.so
CMake Error at CMakeLists.txt:40 (target_link_libraries):
The keyword signature for target_link_libraries has already been used with
the target "little_plane". All uses of target_link_libraries with a target
must be either all-keyword or all-plain.
The uses of the keyword signature are here:
* CMakeLists.txt:10 (target_link_libraries)
* CMakeLists.txt:20 (target_link_libraries)
* CMakeLists.txt:24 (target_link_libraries)
* CMakeLists.txt:28 (target_link_libraries)
CMake Error at CMakeLists.txt:44 (target_link_libraries):
The plain signature for target_link_libraries has already been used with
the target "little_plane". All uses of target_link_libraries with a target
must be either all-keyword or all-plain.
The uses of the plain signature are here:
* CMakeLists.txt:40 (target_link_libraries)
-- Configuring incomplete, errors occurred!
这意味着我的系统上安装了opengl。我只是不知道如何使用target_link_libraries链接到我的项目。
提供可以复制并粘贴到CMakeLists.txt中的答案。
答案 0 :(得分:2)
您以前的所有target_link_libraries
都包含一个传递性关键字(在所有情况下均为PRIVATE
),但是在链接OpenGL时未提供任何关键字。所以也要添加它:
target_link_libraries(little_plane PRIVATE ${OPENGL_gl_LIBRARY})