学习用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的初衷,希望朋友们会喜欢这篇文章,同一时候留下你们的脚印和意见。让我们共同进步,谢谢。

posted @ 2017-06-04 20:02  clnchanpin  阅读(3282)  评论(0编辑  收藏  举报