Qt之QMake编译转换为CMake编译
一、前言-
QMake和CMake都是用来控制编译过程的构建系统,最终生成可在选择的编译器环境中使用的本机makefile和工作区。简单来说,QMake和CMake就像类似于作曲,makefile类似于乐谱,最终由编译器完成乐章的演奏。
那么QMake和CMake有什么区别呢?-
对于纯Qt项目,QMake更加好用。QMake与QtCreator的相性很好,通过.pro文件指导Qt工程编译,方便又快捷。-
但是,如果需要对Qt以外的第三方依赖项进行配置检查,比如一个很大的项目,其中除了Qt的部分子工程外,还有其他语言的部分子工程,那么QMake就远远不如CMake好用了。-
我正在做的一个项目,就是在联调C语言编译的嵌入式应用层代码时,从QMake转向了CMake。
二、CMake基础-
CMake有自己的一套语法,参考博文:“轻松搞定CMake”系列之CMakeLists文件编写语法规则详解。-
对我们最重要的就是其中外部构建的内容,归纳下来就是:
- ADD_SUBDIRECTORY:告诉CMake去子目录中查看可用的CMakeLists.txt文件
- ADD_EXECUTABLE:告诉工程生成一个可执行文件。
- ADD_LIBRARY:告诉工程生成一个库文件。
- FIND_LIBRARY:查找库所在目录。
- SET:用于设置变量,相当于为变量取别名。
- CMAKE_MODULE_PATH:定义cmake模块所在路径。
- EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH:通过 SET 指令重新定义EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量来指定最终的目标二进制的位置。
三、将QMake转换为CMake-
一个典型的.pro文件如下:
QT += core QT -= gui CONFIG += c++11 TARGET = test CONFIG += console CONFIG -= app_bundle TEMPLATE = app QT += network SOURCES += main.cpp \ test_interface.cpp \ motomanlibrary.cpp \ processing.cpp SOURCES += test_interface.h \ motomanlibrary.h \ processing.h
下面将它转换为CMake的写法,首先要创建一个CMakeLists.txt文件,然后开始编辑:-
1、QMake:用到的Qt相关模块。
QT += core QT -= gui
CMake:搜索模块。
find_package(Qt5Core REQUIRED)
2、QMake:其他编译器标志。
CONFIG += c++11
CMake::扩展列表所需的编译器标志集。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
3、QMake:源文件。
SOURCES += main.cpp \ test_interface.cpp \ motomanlibrary.cpp \ processing.cpp
CMake:创建文件列表。
set(SOURCES main.cpp test_interface.cpp motomanlibrary.cpp processing.cpp )
4、QMake:头文件。
SOURCES += test_interface.h \ motomanlibrary.h \ processing.h
CMake:头文件位置。
nclude_directory(.) # or include_directory(${CMAKE_CURRENT_SOURCE_DIR}) include_directory(some/where/else)
5、QMake:要建立的目标。
TARGET = test
CMake:设置目标名称,添加源,链接所需的库。
add_executable(test ${SOURCES} ) qt5_use_modules(test Core Network)
四、编译-
编写好CMake文件后,手动测试一下CMakeLists.txt是否配置正确。建立一个build目录,在目录下执行命令cmake ..
,生成Makefile脚本。然后make -j
,即可在指定的目录下生成我们需要的可执行文件了。
本文作者:cps666
本文链接:https://www.cnblogs.com/cps666/p/17341265.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步