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

cgyqldqp  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(306)

我尝试使用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不起作用,这是为什么?

6psbrbz9

6psbrbz91#

查看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()中,重复该条件是可选的。

mbjcgjjk

mbjcgjjk2#

真实的的答案是https://cmake.org/cmake/help/latest/command/find_package.html的以下部分:
在模块模式下,加载的查找模块负责荣誉由这些变量详细描述的请求;详细信息请参见查找模块。
所以你可能会说这是FindOpenGL.cmake模块中的一个bug。或者,find_package要求每个模块都应该处理相同的事情也可以被认为是一个bug。或者他们没有任何流程来只发布满足这些要求的模块。

相关问题