CMake编译和运行C++文件
- 编写CMakeLists.txt
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( pro )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" )#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main ${OpenCV_LIBS})
- 编写C++文件main.cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(){Mat image;image = imread("./1.jpg");if (image.empty()) {cout << "Error! Input image cannot be read...\n";return -1;}cout<<"图像宽为:"<<image.cols<<"\t高度为:"<<image.rows<<"\t通道数为:"<<image.channels()<<endl;return 0;
}
- 编译和运行
一般把CMakeLists.txt文件放在工程目录下,使用时,先创建一个叫build的文件夹(这个并非必须,因为cmake命令指向CMakeLists.txt所在的目录,例如cmake … 表示CMakeLists.txt在当前目录的上一级目录。cmake后会生成很多编译的中间文件以及makefile文件,所以一般建议新建一个新的目录,专门用来编译),然后执行下列操作:
cd build
cmake .. 生成Makefile
make
其中cmake … 在build里生成Makefile,make根据生成makefile文件,编译程序,make应当在有Makefile的目录下,根据Makefile生成可执行文件。
- 运行,直接./main 运行build文件夹下可执行文件,要保证main代码中需要用到的静态文件也在build文件夹下(与可执行文件在一个目录下)。
安装opengl
Centos:
yum list mesa*
yum install mesa*
yum install freeglut*
若没有c++编译器,需:yum -y install gcc-c++
Ubuntu:
apt-get install build-essential libgl1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
测试文件:
vi test.c
#include <GL/gl.h>
#include <GL/glut.h>
#include <stdlib.h>void init(void)
{glClearColor(0.0, 0.0, 0.0, 0.0);glMatrixMode(GL_PROJECTION);glOrtho(-5,5,-5,5,5,15);glMatrixMode(GL_MODELVIEW);gluLookAt(0,0,10,0,0,0,0,1,0);return;
}
void display(void)
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 0, 0);glutWireTeapot(3);glFlush();return;
}int main(int argc, char* argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(0,0);glutInitWindowSize(300, 300);glutCreateWindow("OpenGL 3D View");init();glutDisplayFunc(display);glutMainLoop();return 0;
}
编译:gcc test.c -lglut -lGL -lGLU -o test
运行:./test
执行结果: