[CMake] CMAKE 2.8.9, OS X 10.8 and OpenGL

Benjamin Eikel cmake at eikel.org
Wed Aug 15 17:56:52 EDT 2012


Am Mittwoch, 15. August 2012 um 23:52:09 schrieb Jason T. Slack-Moehrle:
> Hi Benjamin,
> 
> I modified my CMakeLists.txt file a bit:
> 
> PROJECT(Test)
> 
> SET(TEST_VERSION 0.1+devel)
> SET(PROJECT_NAME test)
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
> SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
> 
> SET(CMAKE_C_COMPILER "clang")
> SET(CMAKE_CXX_COMPILER "clang++")
> 
> SET(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++")
> 
> IF(APPLE)
>    find_package(OpenGL REQUIRED)
>    include_directories(${OPENGL_INCLUDE_DIR})
> 
>    INCLUDE_DIRECTORIES ( /System/Library/Frameworks )
>    FIND_LIBRARY(COCOA_LIBRARY Cocoa)
>    FIND_LIBRARY(GLUT_LIBRARY GLUT )
>    FIND_LIBRARY(OpenGL_LIBRARY OpenGL )

You do not need this find_library call. Use the Variable ${OPENGL_LIBRARIES} as 
in my example.

>    MARK_AS_ADVANCED (COCOA_LIBRARY
>                      GLUT_LIBRARY
>                      OpenGL_LIBRARY)
>    SET(EXTRA_LIBS ${COCOA_LIBRARY} ${GLUT_LIBRARY} ${OpenGL_LIBRARY})
> ENDIF (APPLE)
> #target_link_libraries(Test ${EXTRA_LIBS})
> 
> add_executable(Test main.cpp)
> 
> > for OpenGL, better use the shipped find module (see "cmake --help-module
> > FindOpenGL"):
> > 
> > find_package(OpenGL REQUIRED)
> > include_directories(${OPENGL_INCLUDE_DIR})
> > [...]
> > target_link_libraries(Test ${OPENGL_LIBRARIES})
> 
> I get errors:
> 
> $ make
> Scanning dependencies of target Test
> [100%] Building CXX object CMakeFiles/Test.dir/main.cpp.o
> Linking CXX executable Test
> Undefined symbols for architecture x86_64:
>   "_glClear", referenced from:
>       display() in main.cpp.o
>   "_glViewport", referenced from:
>       reshape(int, int) in main.cpp.o
>   "_glutCreateWindow", referenced from:
>       _main in main.cpp.o
>   "_glutDisplayFunc", referenced from:
>       _main in main.cpp.o
>   "_glutIdleFunc", referenced from:
>       _main in main.cpp.o
>   "_glutInit", referenced from:
>       _main in main.cpp.o
>   "_glutInitDisplayMode", referenced from:
>       _main in main.cpp.o
>   "_glutInitWindowSize", referenced from:
>       _main in main.cpp.o
>   "_glutMainLoop", referenced from:
>       _main in main.cpp.o
>   "_glutPostRedisplay", referenced from:
>       idle() in main.cpp.o
>   "_glutReshapeFunc", referenced from:
>       _main in main.cpp.o
>   "_glutSwapBuffers", referenced from:
>       display() in main.cpp.o
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see
> invocation) make[2]: *** [Test] Error 1
> make[1]: *** [CMakeFiles/Test.dir/all] Error 2
> make: *** [all] Error 2
> 
> > Furthermore, I suggest using an out-of-source build. I cannot answer your
> > other question. On my Linux system I do not get these error messages.
> 
> Can you tell me what you mean by 'out-of-source build"?
> 
> -Jason
> --
> 
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> 
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake


More information about the CMake mailing list