學習用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的初衷,希望朋友們會喜歡這篇文章,同時留下你們的腳印和意見,讓我們共同進步,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章