Linux下CMake开发

CMake编译和运行C++文件

  1. 编写CMakeLists.txt
cpp 复制代码
# 声明要求的 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})
  1. 编写C++文件main.cpp
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;
}
  1. 编译和运行
    一般把CMakeLists.txt文件放在工程目录下,使用时,先创建一个叫build的文件夹(这个并非必须,因为cmake命令指向CMakeLists.txt所在的目录,例如cmake ... 表示CMakeLists.txt在当前目录的上一级目录。cmake后会生成很多编译的中间文件以及makefile文件,所以一般建议新建一个新的目录,专门用来编译),然后执行下列操作:
bash 复制代码
cd build 
cmake ..    生成Makefile
make 

其中cmake ... 在build里生成Makefile,make根据生成makefile文件,编译程序,make应当在有Makefile的目录下,根据Makefile生成可执行文件。

  1. 运行,直接./main 运行build文件夹下可执行文件,要保证main代码中需要用到的静态文件也在build文件夹下(与可执行文件在一个目录下)。

安装opengl

Centos:

bash 复制代码
yum list mesa*
yum install mesa*
yum install freeglut*

若没有c++编译器,需:yum -y install gcc-c++

Ubuntu:

bash 复制代码
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

cpp 复制代码
#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

执行结果:

相关推荐
米糕闯编程4 分钟前
鱼香ros2(三)Linux操作总结
linux·机器人·ros2
一技安身22 分钟前
【信创】银河麒麟V10服务器使用安装光盘Packages自建本地yum源
linux·运维·服务器
码农客栈1 小时前
Linux I2C驱动实验
linux·运维·驱动开发
爱喝水的鱼丶2 小时前
SAP-ABAP:隐式/显式增强开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流
OpenPomeloxCommunity3 小时前
Linux 驱动基础(二):驱动自动加载的设计与实现
linux
企业解惑小助手3 小时前
如何禁止文字复制?企业文档防复制项目需求拆解方案
运维·数据库·安全
蓝速科技3 小时前
酒店门店 AI 数字人前台场景适配与落地指南
大数据·运维·数据结构·数据库·人工智能·科技
yyk333243 小时前
Linux常见的基础命令
linux·运维·服务器
名字还没想好☜3 小时前
Docker 镜像瘦身进阶:用 distroless/scratch 把 Go 服务打到 10MB,以及没 shell 怎么调试
运维·docker·容器·golang·kubernetes
JavaPub-rodert3 小时前
Docker 深入理解:从容器原理到生产环境最佳实践
运维·docker·容器