基於Cmake+QT+VS的C++項目構建開發編譯簡明教程


目錄

一、工具下載與安裝

1.     Qt

2.     Visual Studio 2015

3.     Cmake

二、C++及Qt項目構建

1.     基於VS構建Qt項目

2.     基於Qt Creater構建,在VS中使用

用Qt Creater構建項目

用VS開發Qt Creater生成的項目

3.     基於Cmake構建

用CMake-Gui構建

用批處理方式進行Cmake構建項目

 ===========================================

簡介

目前項目是盡量利用開源項目為基礎,考慮到跨平台,以及后期便於開發的協同和延續,開發語言基於C/C++、UI基於QT(5.7.1),集成開發環境(IDE)使用Visual Studio(2015),開發階段基於Windows(WIN10)操作系統(32位 or 64位,如果內存大於4G,建議選64位),項目構建工具使用Cmake。

一、工具下載與安裝

1.  Qt

  • 安裝
    • 步驟省略(建議使用默認安裝即可,包括路徑應該在C盤,安裝路徑不要包含中文)
  • 配置
    • 在系統路徑中添加Qt bin路徑(如“;C:\Qt\5.7.1\5.7\msvc2015\bin”),

2. Visual Studio 2015

  • 下載
    • Visual Studio IDE、代碼編輯器、VSTS 和應用中心:

    https://visualstudio.microsoft.com/zh-hans/

    • 下載 | IDE、Code 和 Team Foundation Server:

    https://visualstudio.microsoft.com/zh-hans/downloads/

    • 下載舊版 Visual Studio 軟件:

 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/

  • 安裝
    • 步驟省略(建議使用默認安裝即可,包括路徑應該在C盤;同時,需要將與Windows C/C++開發有關的Tools、SDK都選中,否則,后續用CMake生成VS工程時,可能出現錯誤)
  • 配置
    • 打開VS,選擇【工具】-【擴展和更新】,搜索“qt”,在結果中選擇“Qt Visual Studio Tools”,下載安裝后,在VS菜單中增加了【Qt VS Tools】。然后選擇【QT VS Tools】-> 【Qt option】,添加Qt版本,名稱“Qt5.7.1”,路徑“C:\Qt\5.7.1\5.7\msvc2015\”。

3. Cmake

  • 簡介
    • CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名為 CmakeLists.txt。Cmake 並不直接建構出最終的軟件,而是產生標准的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects / workspaces),然后再依一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標准的方式建構自己的軟件。CMake 支持 in-place 建構(二進檔和源代碼在同一個目錄樹中)和 out-of-place 建構(二進檔在別的目錄里),因此可以很容易從同一個源代碼目錄樹中建構出多個二進檔。CMake 也支持靜態與動態程式庫的建構。“CMake”這個名字是“cross platform make”的縮寫。雖然名字中含有“make”,但是CMake和Unix上常見的“make”系統是分開的,而且更為高階。作為跨平台構建工具,CMake的創建是為了響應由NLM資助的Insight Segmentation and Registration Toolkit(ITK)的強大的跨平台構建環境,作為Visible Human Project的一部分。它受到Ken Martin和其他開發人員創建的早期系統pcmaker的影響,以支持Visualization Toolkit(VTK)開源3D圖形和可視化系統。最初的CMake實施是在2000年中期,加速開發發生在2001年初。許多改進是由於其他開發人員將CMake納入他們自己的系統的影響。例如, Brad King添加了一些功能以支持CABLE,自動包裝環境和GCC-XML,以及GE Corporate R&D需要對其測試基礎架構(DART)的支持。添加了其他功能以支持VTK的構建環境向CMake的過渡,並支持ParaView,一個並行可視化系統,以支持洛斯阿拉莫斯國家實驗室的高級計算實驗室。
    • CMake官方文檔CMake Tutorial:http://www.cmake.org/cmake/help/cmake_tutorial.html
    • 下載Windows win64-x64 Installer
    • 地址:https://cmake.org/download/
  • 安裝
    • 步驟省略(建議使用默認安裝即可,包括路徑應該在C盤)
  • 配置
    • 將Cmake安裝路徑及bin路徑“c:\cmake3;c:\cmake3\bin”添加到系統PATH中;
    • 並在系統變量中增加變量名:“CMAKE_PREFIX_PATH”,變量值:“C:\Qt\5.7.1\5.7\msvc2015\lib\cmake”。

二、C++及Qt項目構建

1. 基於VS構建Qt項目

  • 打開VS,新建項目,在模板中選擇“Qt”,選擇“Qt Gui Application”,項目名稱“QtGuiDemo”,解決方案同名,設置項目路徑(建議新建,不使用中文命名的文件夾),確定。

  • 根據向導,選擇新項目需要加載的Qt模塊,其中Core、GUI、Widgets為默認加載,下一步。

  • 選擇生成項目的基類“QMainWindow”,其他需自動生成的文件均用默認名稱,Finish。

  • 生成解決方案,自動生成了相關源文件,main.cpp、QtGuiDemo.h、QtGuiDemo.cpp、QtGuiDemo.qrc、QtGuiDemo.ui,在解決方案窗口可見項目文件結構。

  •  在項目目錄中生成的文件結構:

  • main.cpp
#include "QtGuiDemo.h"
#include <QtWidgets/QApplication>
 
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QtGuiDemo w;
  w.show();
  return a.exec();
}
  •  QtGuiDemo.h
#pragma once
 
#include <QtWidgets/QMainWindow>
#include "ui_QtGuiDemo.h"
 
class QtGuiDemo : public QMainWindow
{
  Q_OBJECT
 
public:

QtGuiDemo(QWidget *parent = Q_NULLPTR);
private:

Ui::QtGuiDemoClass ui;
};
  • QtGuiDemo.cpp
#include "QtGuiDemo.h"
 
QtGuiDemo::QtGuiDemo(QWidget *parent)
  : QMainWindow(parent)
{
  ui.setupUi(this);
}

2.基於Qt Creater構建,在VS中使用

  • 用Qt Creater構建項目

    • 打開Qt Creater,新建項目。添加項目名稱及路徑。

    • 選擇編譯套件。

    •  指定源碼文件基本信息。

    •  生成。

 

  • main.cpp
#include "qtguidemo.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtGuiDemo w;
    w.show();
    return a.exec();
}
  • QtGuiDemo.h
#ifndef QTGUIDEMO_H
#define QTGUIDEMO_H
#include <QMainWindow>
namespace Ui {
class QtGuiDemo;
}
class QtGuiDemo : public QMainWindow
{
    Q_OBJECT
public:

explicit QtGuiDemo(QWidget *parent = 0);
~QtGuiDemo();
private:

Ui::QtGuiDemo *ui;
}
#endif // QTGUIDEMO_H
  • QtGuiDemo.cpp
#include "qtguidemo.h"
#include "ui_qtguidemo.h"
QtGuiDemo::QtGuiDemo(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::QtGuiDemo)
{
    ui->setupUi(this);
}
QtGuiDemo::~QtGuiDemo()
{
delete ui;
}
    • 可以觀察VS和Qt Creater生成的代碼區別。

 

  • 通過VS或Qt Creater編譯后,生成的界面。

  • 用VS開發Qt Creater生成的項目

    • 打開VS,選擇【Qt VS Tools】,選擇【Open Qt Project File(.pro)】,項目打開后即可直接修改、編譯。

3.基於Cmake構建

  • 用CMake-Gui構建

    • 新建目錄“CmakeQtGuiDemo”,將用Qt Creater生成的QtGuiDemo項目中的源文件復制進來,其中包含main.cpp、qtguidemo.cpp、qtguidemo.h、qtguidemo.ui;
    • 在該目錄中新建一個以“CMakeLists.txt”命名的文本文件,用記事本編輯即可,其內容如下:
1.#設置cmake版本號
2.cmake_minimum_required(VERSION 3.4.0)
3. 
4.#設置工程名稱
5.project(QtGuiDemo)
6. 
7.#設置工程包含當前目錄,非必須
8.set(CMAKE_INCLUDE_CURRENT_DIR ON)
9. 
10.#打開全局moc,設置自動生成moc文件,一定要設置
11.set(CMAKE_AUTOMOC ON)
12.#打開全局uic,非必須
13.set(CMAKE_AUTOUIC ON)
14.#打開全局rcc,非必須,如需打開,注意修改33行的qrc文件名
15.#set(CMAKE_AUTORCC ON)
16.
17.#查找需要的Qt庫文件,最好每一個庫都要寫,Qt也會根據依賴關系自動添加
18.find_package(Qt5Widgets) 
19.find_package(Qt5Core)
20.find_package(Qt5Gui)
21.
22.#查找當前文件夾中的所有源代碼文件,也可以通過Set命令將所有文件設置為一個變量
23.FILE(GLOB SRC_FILES "./*.cpp")
24.#查找設置當前文件夾中所有的頭文件
25.FILE(GLOB HEAD_FILES "./*.h")
26.#查找設置當前文件夾中所有的ui文件
27.FILE(GLOB UI_FILES "./*.ui")
28.
29.#通過Ui文件生成對應的頭文件,一定要添加
30.qt5_wrap_ui(WRAP_FILES ${UI_FILES})
31.
32.#添加資源文件,非必須,一旦采用,注意修改相應的qrc文件名
33.#set(RCC_FILES rcc.qrc)
34.
35.#將ui文件和生成文件整理在一個文件夾中,非必須
36.source_group("Ui" FILES ${UI_FILES} ${WRAP_FILES} )
37.
38.#創建工程文件
39.add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RCC_FILES} ${WRAP_FILES})
40.
41.#添加Qt5依賴項
42.target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui)
    • 運行CMake-Gui,在“Where is the Source code”和"Where to build the binaries"中均輸入本地項目目錄“C:\QtTest\CmakeQtGuiDemo”,可選擇內部編譯,即在同一目錄中生成項目,目的在於后期在引用lib中的頭文件或庫文件時不需另外操作,不好的地方就是源文件和目標文件混雜,如果想要在源文件外部編譯,可在"Where to build the binaries"中輸入目標路徑“C:\QtTest\CmakeQtGuiDemo_build”,后期再將源文件中頭文件和庫文件拷貝至目標文件夾對應的Lib中。(個人項目建議選外部編譯);

    • 勾選"Grouped"和"Advanced",便於列表項匯總擴展顯示;點擊"Configure"按鈕,彈出生成環境選項,在此根據目標選擇64位還是32位編譯,此例中選擇"Visual Studio 14 2015",並選中"Use default native compilers"用缺省編譯器,點擊"Finish"按鈕,進行安裝配置

    • 經過短暫的等待,有可能會在窗口中出現若干紅色選項,再次點擊"Configure"按鈕繼續生成,如還有紅色選項出現,不需其他操作,繼續"Configure",直到無紅色選項,點"Generate"按鈕,生成VS2015的解決方案等文件,提示"Generating done";

    • 用VS2015打開該解決方案即可進行繼續開發了。因為是目錄外構建,源文件並不在此目錄中,但在VS中可以直接打開源文件進行編輯和保存。

  • 用批處理方式進行Cmake構建項目

    在項目開發初期,會因為各種配置或代碼問題,需要經常進行CMake,每次都用CMake-Gui執行會比較麻煩,在此,可以利用批處理方式執行CMake項目構建。以CMakeQtGuiDemo項目為例。

    • 在此項目源文件目錄下,新建cmake_build_vs2015_project.bat文本文件(該文件要求必須在項目源文件目錄下,即與項目CMakeLists.txt文件同目錄下),其內容如下(rem為注釋):
@echo off

rem 獲取項目CMakeLists.txt文件所在目錄
set CURRENT_CMAKE_DIR=%~dp0

rem 獲取項目CMakeLists.txt文件所在目錄的名稱,用於新建構建目錄
for /f "delims=" %%i in ("%cd%") do set CURRENT_DIR_NAME=%%~ni

rem 到項目CMakeLists.txt文件所在目錄的上級目錄
cd..

rem 獲取當前目錄,%cd%與%~dp0的區別在於獲取的目錄尾部少了“\”
set CURRENT_DIR=%cd%

rem 設置需要外部構建的目錄名稱,在源文件目錄后面加“_build”
set PROJECT_NAME=%CURRENT_DIR_NAME%_build

rem 設置外部構建的完整路徑
set CURRENT_NEW_DIR=%CURRENT_DIR%\%PROJECT_NAME%
echo Cmake in [%CURRENT_NEW_DIR%]

rem 判斷是否已經存在外部構建的路徑,如果存在刪除
if exist %CURRENT_NEW_DIR% (
    rd /s/q %CURRENT_NEW_DIR%
)

rem 新建外部構建目錄
mkdir %CURRENT_NEW_DIR%

rem 進入新建的外部構建目錄,用於Cmake生成項目文檔
cd %CURRENT_NEW_DIR%

rem 根據編譯環境需要設定VS版本,%CURRENT_CMAKE_DIR%用於指定CMakeLists.txt所在目錄,-G 用於指定makefile的生成工具
::cmake ../ -G "Visual Studio 14 2015 Win64"
::cmake ../ -G "Visual Studio 14 2015 ARM"
cmake %CURRENT_CMAKE_DIR% -G "Visual Studio 14 2015"

cd..

rem 查看構建項目的目錄樹
tree %CURRENT_NEW_DIR% /f

pause
    • 運行cmd(或VS開發人員命令提示窗口),進入命令提示符窗口,定位到cmake_build_vs2015_project.bat所在目錄,並執行。
    • 用批處理方式生成的項目與用Cmake-Gui生成的項目是一樣的,用VS2015打開該解決方案即可進行繼續開發了。
    • 為什么需要CMake構建項目,主要是在實際項目中,經常會用到多個第三方庫,或復雜項目結構,用Qt Creater(qmake)或VS構建,過程會變得很繁瑣,一旦設置有誤,就會出現很多編譯錯誤,特別是用VS加載第三方庫,因此,對簡單的Qt工程,采用 qmake或VS,對復雜度高的或需加載多個第三方庫的,采用cmake。
    • 本示例僅描述了簡單的CMake構建項目內容,更復雜的CMakeLists.txt文檔,需要在實踐中不斷總結完善,以形成項目需要的模板(可復用原則)。
  • 練習:在Qt目錄下找到Examples目錄,然后在widgets目錄中找到mainwindows\mdi項目,對其進行多種構建嘗試,並可以學習和掌握關於QMainWindow類及Gui開發的用法,同時,可以配合Qt助手進行進一步詳細學習各種類的用法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM