我遇到了CMake使用GLFW(OpenGL)的问题。
我的CMakeList.txt文件如下所示:
cmake_minimum_required(VERSION 2.6)
project(test)
set(SRC Test.cpp)
add_executable(test ${SRC})
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
find_package(GLEW REQUIRED)
include_directories( ${OPENGL_INCLUDE_DIRS} )
include_directories( ${GLEW_INCLUDE_DIRS} )
include_directories( ${GLFW_INLUDE_DIRS} )
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} )
target_link_libraries(${PROJECT_NAME} glew32 ${GLEW_LIBRARIES} )
target_link_libraries(${PROJECT_NAME} glfw3 ${GLFW_LIBRARIES} )
运行此CMake脚本时我没有遇到任何错误但是当我运行make时,我总是收到此错误:
fatal error: <GLFW/glfw3.h: No such file or directory compilation terminated.
我尝试了一切,但我不知道为什么它找不到这个文件。
答案 0 :(得分:0)
你可以让make向你展示更多输出。
所以我建议你执行
make VERBOSE=1
并查看-I标志被用作编译器的参数。
我也注意到了
pkg_search_module(SOMETHING ..)
其他人正在使用:
pkg_search_module(SOMETHING ..)
if (SOMETHING_FOUND)
include_directories(${SOMETHING_INCLUDE_DIRS})
else (SOMETHING_FOUND)
PkgError_Later("Could not find SOMETHING (pkg name: lib-dev)")
endif (SOMETHING_FOUND)
答案 1 :(得分:0)
首先你应该在线纠正错误 GLFW_INLUDE_DIRS :
include_directories(${GLFW_INLUDE_DIRS})
如果这不能解决您的问题,这里有一个适合我的最小CMakeLists.txt。它不使用PkgConfig
。
cmake_minimum_required(VERSION 2.8)
project(GLFW-hello-world)
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
if(DEFINED ENV{GLFW_INSTALL_DIR})
find_package(glfw3 3.2 REQUIRED PATHS $ENV{GLFW_INSTALL_DIR})
get_filename_component(GLFW_BASE $ENV{GLFW_INSTALL_DIR} ABSOLUTE)
include_directories("${GLFW_BASE}/include")
else()
message("GLFW_INSTALL_DIR not set, searching in default location(s)")
find_package(glfw3 3.2 REQUIRED)
endif(DEFINED ENV{GLFW_INSTALL_DIR})
add_executable(main main.c)
target_link_libraries(main ${OPENGL_LIBRARIES})
target_link_libraries(main glfw)
其中main.c是this page上的示例代码,GLFW是使用共享库编译的(-DBUILD_SHARED_LIBS=ON
)
if
的第一个分支是针对GLFW在本地编译和安装的情况(环境变量GLFW_INSTALL_DIR
应该设置为安装目录),第二个分支是针对GLFW的情况安装到默认位置(我只测试了第一种情况)。