我尝试使用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条答案
按热度按时间6psbrbz91#
查看documentation,出乎意料的是,变量不是
OpenGL_FOUND
,而是OPENGL_FOUND
。我猜您会得到与以下内容更一致的内容:查看source code,
OPENGL_INCLUDE_DIR
在Windows上没有设置,除了cygwin,在您的情况下确实应该为空。请注意,在
else()
和endif()
中,重复该条件是可选的。mbjcgjjk2#
真实的的答案是https://cmake.org/cmake/help/latest/command/find_package.html的以下部分:
在模块模式下,加载的查找模块负责荣誉由这些变量详细描述的请求;详细信息请参见查找模块。
所以你可能会说这是FindOpenGL.cmake模块中的一个bug。或者,
find_package
要求每个模块都应该处理相同的事情也可以被认为是一个bug。或者他们没有任何流程来只发布满足这些要求的模块。