學習用CMake來編寫Qt程序


    近期開始學習CMake,由於項目需求須要用到Qt,自帶的qmake會出現很多問題(比方文件改動之后有時候qmake不會偵測到不會又一次編譯,須要手動去編譯等),於是開始嘗試使用CMake來編寫Qt程序,順便學習一下怎么用CMake來使用find_package,也算給自己一次學習的機會。

    切入正題。CMake對於一些有名的庫都有自帶目錄中Modules里.cmake文件查詢的支持。比方你須要編寫Qt程序,你就能夠去cmake_dir/Moudles/查找 FindQt4.cmake這個文件,里面具體講述了假設你須要用到Qt庫,你須要包括的變量和文件。比方他舉出了 QT_USE_FILE 這個變量。你直接include在CMake腳本之后。你就不須要手動的include_diectories等等,同一時候它也會生成QT_LIBRARIES這個變量讓你來target_link,因此省去了非常多自己須要逐步查詢qmake所在路徑和Qt庫所在路徑的問題。

    里面還講到了比較簡單的使用方法,

find_package(Qt4 4.4.3 REQUIRED QtCore QtGui QtXml)
include(${QT_USE_FILE})
add_executable(myexe main.cpp)
target_link_libraries(myexe ${QT_LIBRARIES})

find_package來查詢你須要用到的Qt版本號庫,之后REQUIRED表示你須要用到Qt中的哪些子庫,之后include它生成的文件,link它給你生成的庫文件變量。你的Qt簡單的Demo就成功了,是不是非常easy。

   同一時候我再來講一下moc的簡單使用方法。Qt的機制它會查詢Q_OBJECT這個宏假設你的文件有這個宏。它的qmake會自己主動去moc一把生成moc_xxx.cpp文件。然后會內部幫你include他們,所在在IDE端Qt Creaotr。我們根本察覺不到這個機制在里面。所以IDE用多了有時候確實察覺不到這些比較底層的機制,用手寫部署確實有其優點。回歸正題,在CMake中。你怎樣去實現由qmake幫你做的這些步驟呢?答案有非常多,我這里列舉一個比較簡單的使用方法,就是給target設置屬性--set_target_properties(${target_name} PROPERTIES ${properties_name} ${properties_value}),CMake給Qt提供了AUTOMOC這個屬性。能夠自己主動的給給定target的項目的全部須要moc的文件自己主動moc,所以這個時候我們僅僅須要加一把set_target_properties(myexe PROPERTIES AUTOMOC ON),這個時候,CMake就會去學qmake的那套邏輯來進行自己主動moc和編譯了。

    今天就先說到這,就算拋磚引玉,讓很多其它的朋友學會用CMake來進行項目的管理和控制,由於有時候過度的依賴IDE確實會影響我們對正確事物的推斷,學會自己編輯項目,更能更好的掌握這個項目的文件結構邏輯和開發整體方向,對庫和庫之間的依賴更能比用IDE更加深刻。這是我學習和嘗試使用CMake的初衷,希望朋友們會喜歡這篇文章,同一時候留下你們的腳印和意見。讓我們共同進步,謝謝。


免責聲明!

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



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