8.CMake編譯Qt項(xiàng)目

CMake編譯Qt項(xiàng)目

1.背景

對(duì)于Qt項(xiàng)目,一般情況下使用qmake進(jìn)行編譯,但是在編譯過(guò)程中會(huì)對(duì)源代碼有一定程度上的改變,而使用CMake則沒(méi)有這種煩惱,或者說(shuō)比較簡(jiǎn)單的進(jìn)行編譯。

借用網(wǎng)上的一句話:

CMake is CMake, others are bullshit.

2.Qt

Qt(/?kju?t/,發(fā)音同「cute」)是一個(gè)跨平臺(tái)的C++應(yīng)用程式開(kāi)發(fā)框架。廣泛用於開(kāi)發(fā)GUI程式,這種情況下又被稱為部件工具箱。也可用於開(kāi)發(fā)非GUI程式,比如控制臺(tái)工具和伺服器。Qt使用於OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox與Mathematica以及被Autodesk 、歐洲太空總署、夢(mèng)工廠、Google、HP、KDE、盧卡斯影業(yè)、西門子公司、富豪集團(tuán), 華特迪士尼動(dòng)畫(huà)製作公司、三星集團(tuán)、飛利浦、Panasonic 所使用。
它是Digia公司的產(chǎn)品。Qt使用標(biāo)準(zhǔn)的C++和特殊的代碼生成擴(kuò)展(稱為元對(duì)象編譯器(Meta Object Compiler, moc))以及一些巨集。通過(guò)語(yǔ)言綁定,其他的程式語(yǔ)言也可以使用Qt。
Qt是自由且開(kāi)放原始碼的軟體,在GNU較寬鬆公共許可證(LGPL)條款下發(fā)布。所有版本都支援廣泛的編譯器,包括GCC的C++編譯器和Visual Studio。------Qt-wiki

3.準(zhǔn)備工作

Qt環(huán)境配置,在這里使用Qt4版本。

sudo apt install qt4-default

4.CMakeLists.txt

# 查找相關(guān)的依賴庫(kù)
find_package(Qt4 REQUIRED)
# 添加路徑
include_directories($(QT_INCLUDES))

# 設(shè)置相關(guān)變量
# 自動(dòng)添加當(dāng)前目錄至路徑中
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 自動(dòng)運(yùn)行moc
set(CMAKE_AUTOMOC ON)
# 自動(dòng)運(yùn)行uic
set(CMAKE_AUTOUIC ON)
# 自動(dòng)運(yùn)行rcc
set(CMAKE_AUTORCC ON)

# 生成可執(zhí)行文件
add_executable(main main.cc)
# 鏈接庫(kù)
target_link_libraries(main Qt4::QtCore Qt4::QtGui)

至此已經(jīng)可以編譯單文件的Qt項(xiàng)目了。

5.使用Qt Designer進(jìn)行界面設(shè)計(jì)

編譯項(xiàng)目的時(shí)候會(huì)使用Qt Designer進(jìn)行界面設(shè)計(jì),完了會(huì)生成一個(gè)ui文件,我們需要將這個(gè)文件進(jìn)行轉(zhuǎn)換成相應(yīng)的頭件,當(dāng)CMAKE_AUTOUIC設(shè)為ON的時(shí)候會(huì)自動(dòng)生成相應(yīng)的ui_xxxxx.h文件,只需要在相應(yīng)的c++文件中#include ui_xxxxx.h即可。

如果沒(méi)有開(kāi)啟該選項(xiàng)則可以在CMakeLists.txt使用以下命令進(jìn)行手動(dòng)生成。

qt4_wrap_ui(OUTPUT_FILED INPUT_FILES)

6.多個(gè)文件的情況

正常情況下我們會(huì)將不同界面寫(xiě)在不同文件里,假設(shè)我們的項(xiàng)目目錄結(jié)構(gòu)如下

├── CMakeLists.txt
├── test.cc
├── test.h
├── test.ui             # ui文件
├── main.cc             # 主函數(shù)所在文件

按照上面的步驟會(huì)出現(xiàn)如下錯(cuò)誤或者一些函數(shù)為聲明的錯(cuò)誤

collect2: error: ld return 1 exit status

出現(xiàn)原因是因?yàn)闆](méi)有將相關(guān)的文件生成動(dòng)態(tài)庫(kù),自然找不到庫(kù)文件或者函數(shù)聲明了,解決方法是在CMakeLists.txt中添加如下命令:

# 生成動(dòng)態(tài)庫(kù)
add_library(test_lib SHARED test.cc test.h)
# 鏈接相關(guān)依賴
target_link_libraries(test_lib Qt4::QtCore Qt4::QtGui)

# 生成可執(zhí)行文件
add_executable(main main.cc)
# 鏈接庫(kù)
target_link_libraries(main test_lib Qt4::QtCore Qt4::QtGui)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注:首發(fā)地址 1. 前言 當(dāng)在做 Android NDK 開(kāi)發(fā)時(shí),如果不熟悉用 CMake 來(lái)構(gòu)建,讀不懂 CMa...
    cfanr閱讀 24,796評(píng)論 1 53
  • CMake學(xué)習(xí) 本篇分享一下有關(guān)CMake的一些學(xué)習(xí)心得以及相關(guān)使用。 本文目錄如下: [1、CMake介紹] [...
    AlphaGL閱讀 12,440評(píng)論 11 79
  • 轉(zhuǎn)載自我的博客:CMake 簡(jiǎn)介和 CMake 模板。 如果你用 Linux 操作系統(tǒng),使用 cmake 會(huì)簡(jiǎn)單很...
    district10閱讀 11,693評(píng)論 3 27
  • 本篇文章旨在簡(jiǎn)介 Android 中 NDK 是什么以及重點(diǎn)講解最新 Android Studio 編譯工具 CM...
    Tsy遠(yuǎn)閱讀 63,870評(píng)論 20 213
  • 最近,在看幾本書(shū)都提到了一輩子學(xué)習(xí)的概念,如果不學(xué)習(xí)就會(huì)倒退,跟不上新的理念,“出了社會(huì)也要當(dāng)書(shū)呆子”。每個(gè)人都要...
    求無(wú)1824閱讀 391評(píng)論 2 0

友情鏈接更多精彩內(nèi)容