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

目錄html

1、工具下載與安裝windows

1.     Qt架構

2.     Visual Studio 2015編輯器

3.     Cmakeide

2、C++及Qt項目構建工具

1.     基於VS構建Qt項目學習

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

用Qt Creater構建項目ui

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

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、工具下載與安裝

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」。

2、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助手進行進一步詳細學習各類類的用法。

相關文章
相關標籤/搜索