我在OS X 10.10上,嘗試用GLUT和OpenGL構建C'項目。 我將它簡化爲展示我的問題的最小示例。我有以下CMakeLists.txt
:cmake在OS X上找不到gl.h的文件
cmake_minimum_required(VERSION 2.8)
FIND_PACKAGE(OpenGL REQUIRED)
FIND_PACKAGE(GLUT REQUIRED)
if(OpenGL_FOUND) # never true, but printed as true
link_directories(${OpenGL_LIBRARY_DIRS})
include_directories(${OpenGL_INCLUDE_DIR})
endif(OpenGL_FOUND)
if(GLUT_FOUND)
link_directories(${GLUT_LIBRARY_DIR})
include_directories(${GLUT_INCLUDE_DIR})
endif(GLUT_FOUND)
# print all vars because wtf
get_cmake_property(_v VARIABLES)
foreach(_v ${_v})
message(STATUS "${_v}=${${_v}}")
endforeach()
add_executable(main main.c)
target_link_libraries(main ${GLUT_LIBRARY} ${OPENGL_LIBRARY})
的main.c
只是包括兩個頭僞:
#include <gl.h>
#include <glut.h>
int main()
{
return 0;
}
現在,cmake .
運行正常和調試目的打印所有變量。我從某處獲取代碼,我對cmake知之甚少,無法知道它是否正在做我認爲的事。無論如何,運行make
返回
main.c:1:10: fatal error: 'gl.h' file not found
#include <gl.h>
^
1 error generated.
頭gl.h
實際上是存在於/System/Library/Frameworks/OpenGL.framework/Headers
,因此應該由cmake的發現,尤其是因爲glut.h
是在相同的結構(簡單地用GLUT取代的OpenGL)和被發現就好了。另外,我感到困惑的是,if(GLUT_FOUND)...
中的塊永遠不會執行(嘗試將message
語句放入其中),但在打印的變量中它表示OPENGL_FOUND=TRUE
。但刪除if條件不會改變任何東西。
實際問題:究竟發生了什麼?爲什麼a)cmake沒有找到標題,除非特別包含,b)儘管OPENGL_FOUND
打印爲TRUE,if塊不能執行,c)glut.h
不會出現這種問題?在這花了幾個小時,無法理解爲什麼。
正確的變量是'OPENGL_FOUND'。所有其他變量也是如此。使用大寫的'OPENGL'。 'FindOpenGL'也不設置'LIBRARY_DIR'。你真的在看文檔嗎? – pmr 2014-11-04 21:42:09
大寫或無在這裏沒有任何區別。我也不確定它是否可以(?) 關於變量:是的,我嘗試了幾件事情。比如它聲明瞭一個變量'OPENGL_LIBRARIES',我試過了,但問題不在於這裏的連接步驟。 – oarfish 2014-11-04 22:02:47
是的,cmake變量是區分大小寫的。嘗試使用正確的'OPENGL_INCLUDE_DIR'。對於MacOS上的CMake,這應該是'gl.h'的完整路徑。問題是Mac OS上的框架有很奇怪的包含路徑。 – pmr 2014-11-04 22:25:03