您的当前位置:首页正文

使用qtCreator创建一个用Cmake(需要添加CMakeLists.txt文件,不适用*.pro)编译的工程

2024-11-30 来源:个人技术集锦

在windows系统下,通常使用vs系列程序编辑器,而在linux系统下没有类似的IDE,需要我们自己选择其他工具代替

通常会使用qtCreator和cmake或者qmake来创建工程,下面是分别使用qmake和cmake创建工程的方法

1.使用qmake编译
首先,点击左上角文件,选择”新建文件或项目“选项,如下图1:在项目中分别有Application、Library、其他项目、Non QT Project、Import Project,如果选择“Application”,Qt Console Application(qt控制台应用)。

2.使用cmake编译
与之前一样新建项目,在项目中选择Non Qt Project选项,并选择Plain C++ Application,之后选择工程保存路径和名称,之后时关键一步:如下图,选择cmake编译工程,点击 “下一步” 直到完成。创建了用CMakeLists.txt作为配置文件的工程。

#以下四行是新建工程之后自动添加的
project(test_camera)                    #工程名称
cmake_minimum_required(VERSION 2.8)         #cmake版本要求
aux_source_directory(. SRC_LIST)            #添加源文件,把存储源文件的变量赋值给SRC_LIST
add_executable(${PROJECT_NAME} ${SRC_LIST})     #生成执行文件


if( CMAKE_BUILD_TYPE STREQUAL "Release")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++11 -fPIC")
else()
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -std=c++11 -fPIC")#设置寻找外部库的cmake参数的
endif()
message("*** ${PROJECT_NAME}: Build type:" ${CMAKE_BUILD_TYPE} ${CMAKE_CXX_FLAGS} "***")
#设置cmake位置,
set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmakes)
#设置opencv的位置
set(OpenCV_DIR ~/opencv-3.2.0/build)
find_package(OpenCV REQUIRED)

#-------------------------------------- 包含头文件 --------------------------------------
include_directories(${OpenCV_INCLUDE_DIRS})#设置opencv头文件包含路径,类似vs中的include路径
include_directories(${Qt5Widgets_INCLUDE_DIRS})
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)


#-------------------------------------- -添加项目- --------------------------------------
#file(GLOB_RECURSE HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.*h)可以用来添加头文件和源文件
#file(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c*)



#-------------------------------------- -添加链接库- --------------------------------------
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
${OpenCV_LIBS}
${Qt5Widgets_LIBRARIES}
${Boost_LIBRARIES}
)

以上包含了最基本的工程配置,头文件、库文件、源文件、和执行文件生成满足最简单的程序,下面是源文件main.cpp

#include <iostream>
#include"opencv2/highgui.hpp"
#include"opencv2/opencv.hpp"
#include"opencv2/imgcodecs.hpp"
#include"opencv2/imgproc.hpp"
#include"opencv2/video.hpp"
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{

    Mat frame;
    VideoCapture capture;
    bool IsOpen = capture.open(1);
    if(IsOpen)
    {
        while(true)
        {
            capture >> frame;
            imshow("test_camera", frame);
            waitKey(1);
        }

    }


    cout << "Hello World!" << endl;
    return 0;
}

以上只是用了最简单的工程演示过程。

显示全文