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目录下,执行所需的执行文件即可。
执行结果如下: