QT 環境安裝和跨平台編譯那些事


 QT源碼和SDK下載

http://download.qt.io

 

QT5.13安裝

windows下通常使用VS來開發,而linux下則使用OtCreator來開發。

 

linux,以Ubuntu為例

安裝Qt前需要先安裝 g++ make

sudo apt-get install libgl1-mesa-dev

安裝環境准備好后直接安裝 ./qt-opensource-linux-x64-5.13.0.run 即可。

注意:一般安裝在/usr下,里面很多文件夾,根據文件的類型,分門別類,不是一個軟件一個文件夾。以前老版本的Linux習慣放在/usr/local目錄下。

部分軟件放在/opt下,則是一個軟件統一在一個文件夾下。/opt目錄專門是用來給第三方軟件放置文件的,比如一些壓縮包解壓的軟件都放在這里。

比如“網易雲音樂”就安裝在/usr/lib/netease-cloud-music

比如Chrome就放在/opt/google/chrome

 

Windows下調試工具的安裝設置(使用微軟的編譯器)

安裝完VisualStudio2017后,接着安裝win10 SDK,安裝完成后,在C:\Program Files (x86)\Windows Kits\10\Debuggers\x64(x86)下有一個cdb.exe用於調試。

Windows下,為QTCreator配置時注意使用的QT支持的編譯器和VS支持的編譯器必須一致。這里我們使用VS2017和QT5.13。

安裝完后,打開Kits界面,如下所示進行查看。編譯器有可能沒有配置,需要手動選擇一下。

 

 

 

QTCreator項目配置

1 配置庫和頭文件

 

然后導入頭文件和lib文件所在路徑,將dll拷貝到可執行目錄下。

 

2、VS+QT項目配置

 

2.1、 首先安裝QT的插件,根據VS的版本安裝,這里使用qt-vsaddin-msvc2017-2.3.2

 

 

2.2、打開VS后,在菜單欄中的QT VS Tools->QT Options,配置你的QT版本

 

 

 

一 QT程序編譯經歷的步驟

 

1 qmake編譯pro生成makefile

2 jom或者make編譯makefile

 生產界面源碼 uic.exe widget.ui –o ui_widget.h

 生產信號槽代碼 moc.exe widget.h moc_widget.cpp

 

二 手動創建pro

windows下環境設置如下

 

linux下設置如下

 

先設置qmake的路徑,然后使用qmake由testqmake.pro文件構建得到makefile文件。

然后使用make編譯得到可執行文件。

 

三、將QtCreator創建的工程轉換為VS

直接使用命令的行

 

使用命令行產生的代碼在VS打開時,可能會出現“找不到 Windows SDK 版本8.1.請安裝所需的版本的 Windows SDK 或者在項目屬性頁的問題解決方案”這種錯誤。處理方法如下所示。

 

 

或者使用插件也可以將QTCreator工程轉換為VS工程。

 

 

 

四、pro文件下添加一個內部庫

無論是通過UI,還是直接在pro文件中更改,都需要在添加之后,重新執行下qmake。

 

在幫助手冊中找到你要使用的QT內部類,幫助手冊會告訴你這個類該使用什么模塊。

 

 

 

五、頭文件引用。

對於工程來說,當前路徑表示的是構建路徑,即和源碼同一級的文件夾下,如圖是build-testqmake-Desktop_Qt_5_13_0_MSVC2017_64bit-Debug文件夾下。

 

$$PWD是獲取當前源碼路徑,即在testqmake文件夾下,所以以下兩個路徑是相等的。

 

 

 

六、pro文件下 庫引用和庫路徑指定。

語法: LIBS += -L”../../lib” –lopencv_world320 類似於鏈接庫

雖然Windows和linux下庫的名字稍有區別

linux下 libopencv_world320.so

windows下 opencv_world320.lib

但是QT會自動幫我們對應不同的平台。

 

pro文件下指定運行目錄

DESTDIR  +=  ../../bin

 

pro文件下指定運行程序名字

TARGET = testq

 

七、QT創建一個動態庫

pro文件下指定TEMPLATE = lib,如果pro文件下不指定,則默認生成應用程序。

linux下動態庫是xxx.so 靜態庫是xxx.a

windows下動態庫是xxx.dll 靜態庫是xxx.lib,而且動態庫還包含一個標示地址的lib文件,而且,windows下還需要指定導出函數。

 

八、debug和release版本編譯設置

CONFIG += debug_and_release(默認情況下是debug和release都有的)

除此之外,CONFIG還提供了CONFIG()函數。如下所示,如果是debug版本則輸出的程序稱為debug_binary,否在是release_binary。

CONFIG(debug, debug|release){//注意大括號必須緊跟着

TARGET = debug_binary

}else{

TARGET = release_binary

}

 

九、跨平台編譯項目

針對不同平台使用不同配置

 

win32:INCLUDEPATH += “C:/mylibs/extra headers”

win32{

message(win32)

}

不是linux的平台

!linux{

message(win32)

}

 

如果是win32或linux

win32|linux{

message(win32)

}

 

QT內置定義了一些值 win32 linux macx unix

變量 QMAKESPEC 存儲了當前的編譯環境 message($$QMAKESPEC)可以打印出當前的編譯環境。

我們可以查看

QT\5.13.0\msvc2017\mkspecs文件下的平台。

 

 最后附上一個pro文件

#指定源碼
SOURCES += xsocket.cpp
#指定頭文件
HEADERS += xsocket.h \
    xglobal.h
#指定生成的dll的名字
TARGET = libdll
#指定生成動態庫
TEMPLATE = lib
#如果要生成靜態庫則需要再加一個
#CONFIG += staticlib
 
        
#添加LIBDLL_LIB宏
DEFINES +=LIBDLL_LIB
 
        
#指定dll的輸出路徑,只針對windows
DLLDESTDIR = ../../bin
 
        
#指定輸出路徑,編譯生成的所有文件都會往這個路徑輸入
DESTDIR = ../../lib


免責聲明!

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



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