學習用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就成功了,是不是很簡單。

   同時我再來講一下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