天天看點

Qt的工程檔案 *.pro檔案詳解

在使用Qt Creator開發項目的時候,需要配置*.pro檔案,這裡面的内容繁多,各種配置屬性,變量等都可以設定,最重要的是編譯就依賴這些配置,有時候一個配置設定不對,報各種莫名其妙的錯誤,本文是對pro檔案的配置屬性作一個解釋,友善以後在開發過程中引用參考。

首先來看一個示例:

QT       += core gui network websockets xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

DEFINES += SQLITE_HAS_CODEC

CONFIG +=debug_and_release

INCLUDEPATH += ./src

#window版64位 openssl頭檔案路徑
INCLUDEPATH += $${PWD}/ThirdPartyInclude


#MyVersion = 1.0.0

message(INCLUDEPATH = $${INCLUDEPATH})#配置屬性
#message("MyVersion = " $${MyVersion})#自定義
#message("PATH = " $$(PATH))#環境變量
#message(Qt version = $$[QT_VERSION])#内置變量
#message(“Qt version” = $${QT_VERSION})#内置變量
#message("CONFIG =" $${CONFIG}) #配置屬性
#message(OUT_PWD = $${OUT_PWD}) #配置屬性
message("PWD = " $${PWD}) # D:/work/IMChat

#windows平台
win32:{
    #windows 32位
    contains(QT_ARCH, i386) {
        CONFIG(debug, debug|release){
            TARGET = IMChat
            DESTDIR = ../win32/debug
            LIBS += -L$$PWD/../win32/debug -llibeay32 -lssleay32
        }else{
             TARGET = IMChat
             DESTDIR = ../win32/release
             LIBS += -L$$PWD/../win32/lib -llibeay32 -lssleay32
        }
        message("32-bit " $${DESTDIR})

    }else {#windows 64位
        CONFIG(debug, debug|release){
             TARGET = IMChat
             DESTDIR = ../win64/debug
             LIBS += -L$$PWD/../win64/debug -llibeay32 -lssleay32
        }else{
             TARGET = IMChat
             DESTDIR = ../win64/release
             LIBS += -L$$PWD/../win64/lib -llibeay32 -lssleay32
        }

        message("64-bit " $${DESTDIR})
    }
}else{#Mac平台隻有64位

    CONFIG(debug, debug|release){
         TARGET = IMChat
         DESTDIR = ../bin64/debug
    }else{
         TARGET = IMChat
         DESTDIR = ../bin64/release
    }
    message($DESTDIR)
}
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp 

HEADERS += \
    mainwindow.h 


FORMS += \
    mainwindow.ui 

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    res.qrc
           

字段的解釋:

HEADERS:指定C++頭檔案

SOURCES:指定C++實作檔案

FORMS:指定需要uic處理的ui檔案

RESOURCES:指定需要rcc處理的qrc檔案

DEFINES:指定預定義預處理器符号

INCLUDEPATH:指定C++編譯器搜尋頭檔案路徑

LIBS:指定工程要連結的庫

CONFIG:指定工程配置和編譯參數

QT:指定工程所要使用的Qt子產品

VERSION:指定目标庫版本号

TARGET:指定可執行檔案或庫的基本檔案名,預設為目前目錄名

DESTDIR:指定可執行檔案放置的目錄

DLLDESTDIR:指定目标庫檔案放置的目錄

CONFIG:指定工程配置和編譯參數

以下對CONFIG變量做主要介紹:

debug:編譯有調試資訊的可執行檔案或則庫

release:編譯不具有調試資訊可執行檔案或者庫(如果同時指定debug release時,隻有debug有效)

warn_off:關閉大量警告,預設是打開的

qt:指應用程式使用Qt

dll:動态編譯庫

staticlib:靜态編譯庫

plugin:編譯一個插件

console:應用程式需要寫控制台

當我們寫CONFIG變量時,可以使用

如:CONFIG = qt release warn_off

或者CONFIG = qt

      CONFIG += release

      CONFIG += warn_off

當想要移除某個設定時:CONFIG -= warn_off

在pro檔案裡,可以使

message來輸出各種列印資訊,但每個資訊的格式有差別

MyVersion = 1.2

#Qt的配置屬性,通過$${varName}通路,例如

message("CONFIG =" $${CONFIG}) #配置屬性

message(OUT_PWD = $${OUT_PWD})#配置屬性

message(INCLUDEPATH = $${INCLUDEPATH})#配置屬性

CONFIG, INCLUDEPATH,  OUT_PWD這些是配置屬性

#Qt的内置變量,通過$${varName}或$$[varName]通路,例如

message(Qt version = $$[QT_VERSION])#内置變量

message(“Qt version” = $${QT_VERSION})#内置變量

QT_VERSION 是内置變量

#環境變量, 通過$$(varName),例如

message("PATH = " $$(PATH))#環境變量

PATH 是環境變量

#自定義變量,通過$${varName}通路,例如

message("MyVersion = " $${MyVersion})#自定義

Qt的工程檔案 *.pro檔案詳解

平台配置

win32:{SOURCES+= main.cpp }

unix:{SOURCES+= main.cpp }

等,裡面還可以寫條件區分版本

參考:

http://blog.chinaunix.net/uid-20665441-id-305473.html

http://blog.chinaunix.net/uid-23670869-id-2391678.html

https://blog.csdn.net/fanyun_01/article/details/79122558

http://blog.chinaunix.net/uid-23670869-id-2391678.html

https://blog.csdn.net/zkl99999/article/details/61197930

https://blog.csdn.net/zhaoyun_zzz/article/details/90575031

https://blog.csdn.net/u012734169/article/details/79740763

更新V2

繼續閱讀