不妨先看個例子吧:
#include /
#include /
qdebug>
intmain(int
argc, char** argv)
如何編譯這個程式呢?我們知道,構建乙個c++程式:無非是編譯(包括編譯預處理)、鏈結 這幾步。
對這個程式來說呢,也就是,指定
標頭檔案路徑
$qtdir/include
庫檔案qtcore4.lib(或相應的其他形式)
答案就簡單了(分別採用g++和msvc進行編譯):
g++ main.cpp -ie:\qt\4.7.0\include -o main -le:\qt\4.7.0\lib -lqtcore4或
cl main.cpp -id:/qt/4.7.0/include -femain -link -libpath:d:/qt/4.7.0/lib qtcore4.lib引數的含義可參考:從 c++ 到 qt
我們知道,在c++中,使用第三方庫的過程,就是包含標頭檔案、鏈結庫檔案的過程:
使用qstring
需要 -lqtcore4
使用qwidget
需要 -lqtgui4
使用qftp
需要 -lqtnetwork4
使用qwebview
需要 -lqtwebkit4
......
我們接下來先簡單看一下qt的標頭檔案和庫檔案,然後看看qmake是如何處理的:為什麼我們不需要在.pro檔案內指定這些標頭檔案路徑和庫檔案
估計不少對c、c++不是那麼熟的同仁,會對qt中的下面各種寫法感到迷惑(比如我們要用到 qstring 的標頭檔案):
不過咱們都是學過c、c++的,都知道尖括號或雙引號內就是乙個標頭檔案的檔名。所以理解起來應該沒什麼難度,轉來轉去無非是下面的幾個檔案:
所以呢?當你
使用標頭檔案
需要指定標頭檔案路徑
#include
$qtdir/include/qtcore
#include
$qtdir/include
有些人喜歡用#include這種寫法,這是標頭檔案在哪兒呢?它的全路徑是
$qtdir/include/qtcore/qtcore與此類似
使用標頭檔案
需要指定標頭檔案路徑
#include
$qtdir/include/qtcore
#include
$qtdir/include/qtgui
#include
$qtdir/include/qtscript
......
不清楚你注意到沒?如果你堅持使用 #include 這種寫法,你只需要乙個標頭檔案路徑,這就是$qtdir/include
和標頭檔案比起來,庫檔案似乎就比較簡單了。因為它們直接在下面的路徑下
路徑簡單,可是庫呢?
以windows下msvc編譯的qt4為例:
動態編譯
用qmake管理我們前面的例子的話,我們只需要寫乙個簡單 .pro 檔案
config += console這樣一來,qmake是如何知道需要哪些標頭檔案和庫檔案的呢?qt -= gui
sources += main.cpp
其實,這兒省略了兩行**(因為是預設值,所以可以不寫,但對我們理解這個例子至關重要)
config += qt那麼這些東西如何和前面的東西聯絡起來呢?qt += core
首先
config += qt將使得最終包含:
其次
qt += core將對qt相關的路徑進一步細化
看,現在標頭檔案路徑和庫檔案都有了,而且,無論標頭檔案寫成 qstring 還是 !qtcore/qstring 都能被找到。
再次,由於在 .pro 檔案內
這使得這點變得更加隱藏
舉個例子,如果我們在程式中用了
#include那麼我們將需要...qftp ***;
...
這兩個正是下面的語句所做的:
qt += network哈哈哈,發現下面問題的答案了沒:
當啟用乙個模組時,我們
這是最常規的,qtcore、qtgui、qtnetwork 等等
比如 qaxcontainer 模組
config += qaxcontainer比如 qttest 模組:
我們可以使用
config += qtestlib也可以使用
qt += testlib兩者的區別是,後者會定義 qt_testlib_lib 這樣巨集(同qt+= core gui等效果一樣),前者則不會定義這個巨集。
標頭檔案的處理
ifndef x define x endif 這是巨集定義的一種,它可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等等 ifndef x 先測試x是否被定義過 define x 如果沒有定義下面就定義x並執行下面的語句 endif 如果已經定義了則執行 endif後面的語句 條件指示符...
關於標頭檔案
自定義標頭檔案通常放在使用該標頭檔案的原始檔所在的目錄中,並使用 include myhead.h 來包含。標頭檔案是不編譯的,因為c語言編譯過程之前有個預編譯過程。在這個過程中用標頭檔案中的內容替換原始檔中 include 命令,所以在編譯器看來,沒有標頭檔案,只有原始檔。預編譯過程還包括條件編譯...
Eclipse C工程標頭檔案引入
我們在進行c c 的開發時,習慣把頭檔案放乙個資料夾比如include,原始檔放src,這樣在原始檔裡include你自己的標頭檔案會找不到標頭檔案,這是因為eclipse不會自己新增同乙個工程裡面的各資料夾路徑,所以自己寫的標頭檔案就在眼前,但就是找不到,解決辦法 點c 專案上右鍵,propert...