ubuntu14.04 64位下,默认是没有安装OpenGL相关依赖库的,若安装,则依次执行如下几条命令即可:
$ sudo apt-get update $ sudo apt-get install build-essential $ sudo apt-get install libgl1-mesa-dev $ sudo apt-get install libglu1-mesa-dev $ sudo apt-get install freeglut3-dev
以下是验证其正确性的测试代码:
#include <iostream> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> namespace { void Init(void) { glClearColor(1.0, 0.0, 1.0, 0.0);//设置背景颜色为洋红 glColor3f(0.0f, 1.0f, 0.0f);//设置绘图颜色为绿色 glPointSize(4.0);//设置点的大小为4*4像素 glMatrixMode(GL_PROJECTION);//设置合适的矩阵 glLoadIdentity(); gluOrtho2D(0.0, 640.0, 0.0, 480.0); } void Display(void) { glClear(GL_COLOR_BUFFER_BIT);//清屏 glBegin(GL_POINTS); glVertex2i(289, 190); glVertex2i(320, 128); glVertex2i(239, 67); glVertex2i(194, 101); glVertex2i(129, 83); glVertex2i(75, 73); glVertex2i(74, 74); glVertex2i(20, 10); glEnd(); glFlush(); } } // namespace int main(int argc, char* argv[]) { glutInit(&argc, argv);//初始化工具包 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//设置显示模式 glutInitWindowSize(640, 480);//设置窗口大小 glutInitWindowPosition(100, 150);//设置屏幕上窗口位置 glutCreateWindow("my first attempt");//打开带标题的窗口 glutDisplayFunc(&Display);//注册重画回调函数 Init(); glutMainLoop();//进入循环 return 0; }
CMakeLists.txt文件的内容如下:
PROJECT(multi_executable_file) CMAKE_MINIMUM_REQUIRED(VERSION 3.0) # 查找OpenCV FIND_PACKAGE(OpenCV REQUIRED) IF(OpenCV_FOUND) MESSAGE("===== support OpenCV =====") MESSAGE(STATUS "OpenCV library status:") MESSAGE(STATUS " version: ${OpenCV_VERSION}") MESSAGE(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") MESSAGE(STATUS " install path: ${OpenCV_INSTALL_PATH}") MESSAGE(STATUS " libraries: ${OpenCV_LIBS}") INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) ELSE() MESSAGE("##### not support OpenCV #####") ENDIF() # 查找OpenMP FIND_PACKAGE(OpenMP REQUIRED) IF(OpenMP_FOUND) MESSAGE("===== support OpenMP =====") MESSAGE(STATUS "OpenMP library status:") MESSAGE(STATUS " version: ${OpenMP_VERSION}") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") ELSE() MESSAGE("##### not support OpenMP #####") ENDIF() # 查找OpenGL FIND_PACKAGE(OpenGL REQUIRED) IF(OPENGL_FOUND) MESSAGE("===== support OpenGL =====") MESSAGE(STATUS "OpenGL library status:") MESSAGE(STATUS " include path: ${OPENGL_INCLUDE_DIR}") MESSAGE(STATUS " libraries: ${OPENGL_LIBRARIES}") INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) ELSE() MESSAGE("##### not support OpenGL #####") ENDIF() # 查找GLUT FIND_PACKAGE(GLUT REQUIRED) IF(GLUT_FOUND) MESSAGE("===== support GLUT =====") MESSAGE(STATUS " include path: ${GLUT_INCLUDE_DIR}") MESSAGE(STATUS " libraries: ${GLUT_LIBRARIES}") INCLUDE_DIRECTORIES(${GLUT_INCLUDE_DIR}) ELSE() MESSAGE("##### not support GLUT #####") ENDIF() # 支持C++11 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2 -std=c11") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2 -std=c++11") INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}) FILE(GLOB samples ${PROJECT_SOURCE_DIR}/*.cpp) FOREACH (sample ${samples}) STRING(REGEX MATCH "[^/]+$" sample_file ${sample}) STRING(REPLACE ".cpp" "" sample_basename ${sample_file}) ADD_EXECUTABLE(test_${sample_basename} ${sample}) TARGET_LINK_LIBRARIES(test_${sample_basename} ${OpenCV_LIBS} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} pthread) ENDFOREACH()
build.sh脚本内容如下:
#! /bin/bash echo "Note: new create build directory, and executable file in build" echo ${PWD} mkdir -p build cd build cmake .. make
进入到multi_executable_file目录后,执行:$ ./build.sh, 会自动生成build目录,并编译当前的.cpp文件,最终针对每个.cpp文件均会生成对应的执行文件,然后进入到build目录下,执行所需的执行文件即可。
执行结果如下: