cmake find_package(OpenGL REQUIRED)失败,没有任何错误消息

时间:2016-10-10 01:06:35

标签: opengl cmake

我试图使用cmake(Windows10 + VS2010)来查找OpenGL,我使用以下代码:

find_package(OpenGL REQUIRED)
message(STATUS "OpenGL_FOUND:= ${OpenGL_FOUND}")

if(OpenGL_FOUND)
    message('OpenGL_FOUND-is-true')
else(OpenGL_FOUND)
    message('OpenGL_FOUND-is-false')
endif(OpenGL_FOUND)

message(STATUS "OPENGL_INCLUDE_DIR:= ${OPENGL_INCLUDE_DIR}")
message(STATUS "OPENGL_LIBRARY:= ${OPENGL_LIBRARY}")
message(STATUS "OPENGL_LIBRARIES:= ${OPENGL_LIBRARIES}")

输出结果为:

OpenGL_FOUND:= 
'OpenGL_FOUND-is-false'
OPENGL_INCLUDE_DIR:= 
OPENGL_LIBRARY:= glu32;opengl32
OPENGL_LIBRARIES:= glu32;opengl32

find_package中的arg REQUIRED没有生效,为什么会这样?

2 个答案:

答案 0 :(得分:2)

查看documentation,意外,变量不是OpenGL_FOUND,而是OPENGL_FOUND。我想你会得到更符合以下内容的东西:

find_package(OpenGL REQUIRED)
message(STATUS "OPENGL_FOUND:= ${OPENGL_FOUND}")

if(OPENGL_FOUND)
    message('OPENGL_FOUND-is-true')
else()
    message('OPENGL_FOUND-is-false')
endif()

message(STATUS "OPENGL_INCLUDE_DIR:= ${OPENGL_INCLUDE_DIR}")
message(STATUS "OPENGL_LIBRARY:= ${OPENGL_LIBRARY}")
message(STATUS "OPENGL_LIBRARIES:= ${OPENGL_LIBRARIES}")

add_executable(foo main.cpp)
target_include_directories(foo PUBLIC ${OPENGL_INCLUDE_DIR})
target_link_libraries(foo ${OPENGL_LIBRARIES})

查看source codeOPENGL_INCLUDE_DIR未在Windows上设置,除了cygwin,并且在您的情况下确实应为空。

请注意,重复条件在else()endif()中是可选的。

答案 1 :(得分:0)

真正的答案是https://cmake.org/cmake/help/latest/command/find_package.html

的这一部分
  

在模块模式下,加载的查找模块负责遵守这些变量详细说明的请求;有关详细信息,请参阅查找模块。

所以你可以说这是FindOpenGL.cmake模块中的一个错误。或者,find_package要求每个模块应该处理相同的事情的要求也可以被认为是一个错误。或者他们没有任何流程来仅运送满足这些要求的模块。