CMake的简单应用

  • 环境:

    • window 10
    • visual studio 2019(nmake/cl/link/lib/dumpbin)
    • Qt 5.14.0 (designer/uic/moc)
    • OpenCV 4.2.0
    • Torch C++ 1.5.1
    • cmake
  • 注意事项:

    1. 编译/链接的环境(编译/链接的命令行设置):Makefile/CMake/QMake
      1. include
      2. lib
    2. 运行环境:(设置PATH/或者拷贝到当前路径/或者拷贝到window安装目录下的system32)
      1. bin
    3. 动态库也有依赖环境:
      1. window的运行环境(基本上差不多)
      2. vcrt160.lib运行时(visual studio自带/动态库自带)
  • lib库名.主版本号.副版本号.批次号.so

  • 库名140.dll/库名160.dll

注意

  1. libtorch,opencv, qt的动态库所在路径设置为PATH环境变量

    • 保存编译后的执行文件能调用到动态库;
  2. 头文件目录

    • opencv
      • C:\opencv_new\install\include
    • qt
      • C:\Qt\Qt5.13.0\5.13.0\msvc2017_64\include
    • libtorch
      • C:\libtorch\include
  3. lib

    • 目录
      • C:\Qt\Qt5.13.0\5.13.0\msvc2017_64\lib
      • C:\opencv_new\install\x64\vc16\lib
      • C:\libtorch\lib
    • lib文件
      • 根据调用的模块

CMake实战

Qt, OpenCV的例子

使用Qt显示一副OpenCV读取的图像

main.cpp

#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QLabel>
#include <opencv2/opencv.hpp>


int main(int argc, char **argv){
    // 1. 创建Qt应用
    QApplication app(argc, argv);
    // 2. 创建对话框
    QDialog dlg;
    dlg.setWindowTitle("CMake组织工程");
    dlg.resize(600, 400);
    dlg.move(100, 100);
    // 3. 创建标签狂
    QLabel  lbl("图像显示", &dlg);
    lbl.setGeometry(0, 0, dlg.width(), dlg.height());

    // 4. 打开图像
    cv::Mat img = cv::imread("gpu.bmp");
    cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
    // 5. 显示图像
    QImage qt_img(img.data, img.cols, img.rows, QImage::Format_RGB888);
    QPixmap qt_pixmap = QPixmap::fromImage(qt_img);
    lbl.setPixmap(qt_pixmap);
    lbl.setScaledContents(true);

    dlg.show();
    return app.exec();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(main)

# 控制C++编译选项,链接选项
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQIUIRED True)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# 属于QT专有
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

# 配置Qt的内置的CMake环境(源代码安装才有cmake目录)
set(CMAKE_PREFIX_PATH  "C:/Qt/Qt5.13.0/5.13.0/msvc2017_64/lib/cmake")

# Qt的库,头文件自动查找
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Core REQUIRED)

# 头文件
include_directories(
    C:/Qt/Qt5.13.0/5.13.0/msvc2017_64/include
    C:/opencv_new/install/include
)
# 库路径
link_directories(
    C:/opencv_new/install/x64/vc16/lib
    C:/Qt/Qt5.13.0/5.13.0/msvc2017_64/lib
)

# 源文件
aux_source_directory(. SOURCES)
add_executable(main ${SOURCES})

# 编译库
target_link_libraries(
    main 
    opencv_core420d.lib
    opencv_imgcodecs420d.lib 
    opencv_imgproc420d.lib 
    Qt5Cored.lib  
    Qt5Widgetsd.lib 
    Qt5Guid.lib
)

  • 把所有的命令写到一个脚本文件中:

build.bat

@rem 创建工程构建工作目录
@mkdir build
@rem 进入构建目录
@cd build
@rem 生成本地工程
@cmake ..
@rem 直接编译visual studio工程
@cmake --build . --config Debug
@rem 拷贝执行文件到图像所在目录
@copy .\Debug\main.exe  ..\
@rem 回到代码目录
@cd  ..
  • 最后运行build.bat进行编译,编译成功后运行main.exe

  • 注意:

    • 源代码
    • 头文件
    • lib文件
    • 输出的文件名
    • C++的编译选项/链接选项
    • cmake的封装打包
  • Cmake的抽象在于不需要指定具体的编译器

    • 动态侦测,从而实现跨平台安装与部署
  • 运行展示

在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值