无法使用 CMake 找到包 GLFW
Cannot find package GLFW using CMake
我的项目结构是这样的:
- CMakeLists.txt
- 部门
- glew
- glfw
- 包括
- 来源
- ...
- 图形
- ...
- CMakeLists.txt
两个CMakeLists.txt文件值得关注:
CMakeLists.txt
cmake_minimum_required(VERSION 3.9)
project(noam_engine)
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
set(CMAKE_CXX_STANDARD 11)
set(NE_LIBRARIES common math graphics)
FOREACH(lib ${NE_LIBRARIES})
add_subdirectory(src/${lib})
ENDFOREACH(lib)
add_executable(noam_engine src/main.cpp)
if(OPENGL_FOUND AND GLEW_FOUND)
target_include_directories(noam_engine PUBLIC include ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
target_link_libraries(noam_engine ${NE_LIBRARIES})
endif()
src/graphics/CMakeLists.txt
cmake_minimum_required(VERSION 3.9)
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
file(GLOB SRC "*.cpp")
add_library(graphics ${SRC})
if(OPENGL_FOUND AND GLEW_FOUND)
target_include_directories(graphics PUBLIC ${PROJECT_SOURCE_DIR}/include ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
target_link_libraries(graphics ${OPENGL_gl_LIBRARY} ${GLFW3_LIBRARY} ${GLEW_LIBRARIES})
message(STATUS "GLFW and GLEW successfully linked")
message(STATUS ${OPENGL_gl_LIBRARY})
message(STATUS ${GLFW3_LIBRARY})
message(STATUS ${GLEW_LIBRARIES})
else()
message(STATUS "Cannot find GL libraries")
endif()
简而言之,我想创建一堆引擎静态库,特别是 link graphics
带有 GL 的库,最后 link 所有这些都带有root CMakeLists.txt.
中的可执行文件
但是我注意到 ${GLFW3_LIBRARY} 是空的,我得到了一个 linker 错误,例如,当我调用 glfwInit()。我在构建和安装 GLFW
期间遵循了指南
cmake .
make
make install
我相信头文件和库在 /usr/local/* 中,但显然 CMake 找不到它们或者我做错了什么。
我唯一的假设是 find_package 不知道 glfw3Config.cmake 在 deps/glfw/*
我从 https://github.com/JoeyDeVries/LearnOpenGL/blob/master/cmake/modules/FindGLFW3.cmake 中获取脚本并将其放入 cmake 文件夹中。然后在 CMakeLists.txt 我添加了
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
现在一切正常
感谢@Tsyvarev
我的项目结构是这样的:
- CMakeLists.txt
- 部门
- glew
- glfw
- 包括
- 来源
- ...
- 图形
- ...
- CMakeLists.txt
两个CMakeLists.txt文件值得关注:
CMakeLists.txt
cmake_minimum_required(VERSION 3.9)
project(noam_engine)
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
set(CMAKE_CXX_STANDARD 11)
set(NE_LIBRARIES common math graphics)
FOREACH(lib ${NE_LIBRARIES})
add_subdirectory(src/${lib})
ENDFOREACH(lib)
add_executable(noam_engine src/main.cpp)
if(OPENGL_FOUND AND GLEW_FOUND)
target_include_directories(noam_engine PUBLIC include ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
target_link_libraries(noam_engine ${NE_LIBRARIES})
endif()
src/graphics/CMakeLists.txt
cmake_minimum_required(VERSION 3.9)
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
file(GLOB SRC "*.cpp")
add_library(graphics ${SRC})
if(OPENGL_FOUND AND GLEW_FOUND)
target_include_directories(graphics PUBLIC ${PROJECT_SOURCE_DIR}/include ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})
target_link_libraries(graphics ${OPENGL_gl_LIBRARY} ${GLFW3_LIBRARY} ${GLEW_LIBRARIES})
message(STATUS "GLFW and GLEW successfully linked")
message(STATUS ${OPENGL_gl_LIBRARY})
message(STATUS ${GLFW3_LIBRARY})
message(STATUS ${GLEW_LIBRARIES})
else()
message(STATUS "Cannot find GL libraries")
endif()
简而言之,我想创建一堆引擎静态库,特别是 link graphics
带有 GL 的库,最后 link 所有这些都带有root CMakeLists.txt.
但是我注意到 ${GLFW3_LIBRARY} 是空的,我得到了一个 linker 错误,例如,当我调用 glfwInit()。我在构建和安装 GLFW
期间遵循了指南cmake .
make
make install
我相信头文件和库在 /usr/local/* 中,但显然 CMake 找不到它们或者我做错了什么。
我唯一的假设是 find_package 不知道 glfw3Config.cmake 在 deps/glfw/*
我从 https://github.com/JoeyDeVries/LearnOpenGL/blob/master/cmake/modules/FindGLFW3.cmake 中获取脚本并将其放入 cmake 文件夹中。然后在 CMakeLists.txt 我添加了
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
现在一切正常
感谢@Tsyvarev