我试图使用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
没有生效,为什么会这样?
答案 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 code,OPENGL_INCLUDE_DIR
未在Windows上设置,除了cygwin,并且在您的情况下确实应为空。
请注意,重复条件在else()
和endif()
中是可选的。
答案 1 :(得分:0)
真正的答案是https://cmake.org/cmake/help/latest/command/find_package.html:
的这一部分在模块模式下,加载的查找模块负责遵守这些变量详细说明的请求;有关详细信息,请参阅查找模块。
所以你可以说这是FindOpenGL.cmake模块中的一个错误。或者,find_package
要求每个模块应该处理相同的事情的要求也可以被认为是一个错误。或者他们没有任何流程来仅运送满足这些要求的模块。