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