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

cmake find_package(OpenGL REQUIRED) failed without any error message

本文关键字:任何 消息 错误 失败 find package REQUIRED OpenGL make      更新时间:2023-10-16

我试图使用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

arg REQUIRED在find_package不生效,为什么?

查看文档,意外的是,变量不是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})

查看源代码,OPENGL_INCLUDE_DIR没有在Windows上设置,除了cygwin,并且在您的情况下确实应该为空。

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

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

在Module模式下,加载的find模块负责执行由这些变量详细说明的请求;详细信息请参见find模块。

你可以说这是FindOpenGL中的一个bug。cmake模块。或者,find_package要求每个模块都应该处理相同的事情,也可以被认为是一个bug。或者他们没有任何适当的流程来只发布满足这些需求的模块。