基於Cmake、QT Creator、Visual Studio的C++項目構建、開發、編譯是初學者必要的工具,本文主要介紹這些工具的下載與安裝,以及C++及Qt項目構建,主要包括 1.基於VS構建Qt項目;2.基於Qt Creater構建,在VS中開發Qt Creater生成的項目;3.基於Cma... ...
目錄
一、工具下載與安裝
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”。
二、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助手進行進一步詳細學習各種類的用法。