CMake:在GLFW项目中查找标题的错误

时间:2014-06-06 09:40:46

标签: opengl makefile cmake glfw

我遇到了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.

我尝试了一切,但我不知道为什么它找不到这个文件。

2 个答案:

答案 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的情况安装到默认位置(我只测试了第一种情况)。