CMake +qt

CMake手册

CMake是一种工具,有助于简化跨不同平台的开发项目的构建过程。 CMake自动生成Makefile和Visual Studio项目文件等构建系统。

CMake是第三方工具,拥有自己的文档。 本手册的其余部分详细介绍了如何将Qt 5与CMake一起使用的细节。 使用Qt5所需的最低版本是CMake 3.1.0。
入门

使用CMake时的第一个要求是使用find_package来定位Qt附带的库和头文件。 然后可以使用这些库和头文件来构建基于Qt的库和应用程序。

在CMake中使用Qt库和头文件的推荐方法是使用target_link_libraries命令。 此命令自动添加适当的包含目录,编译定义,位置无关代码标志以及指向Windows上qtmain.lib库的链接。

要构建helloworld GUI可执行文件,通常的用法是:

cmake_minimum_required(VERSION 3.1.0)

project(testproject)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

# Find the QtWidgets library
find_package(Qt5Widgets CONFIG REQUIRED)

# Populate a CMake variable with the sources
set(helloworld_SRCS
    mainwindow.ui
    mainwindow.cpp
    main.cpp
)
# Tell CMake to create the helloworld executable
add_executable(helloworld WIN32 ${helloworld_SRCS})
# Use the Widgets module from Qt 5
target_link_libraries(helloworld Qt5::Widgets)

为了使find_package成功,必须在CMAKE_PREFIX_PATH下面找到Qt 5,或者必须在CMake缓存中将Qt5 <Module> _DIR设置为Qt5WidgetsConfig.cmake文件的位置。 使用CMake的最简单方法是将CMAKE_PREFIX_PATH环境变量设置为Qt 5的安装前缀。

CMAKE_AUTOMOC设置在需要时自动运行moc。 有关此功能的更多信息,请参阅CMake AUTOMOC文档
导入目标

为每个Qt模块创建导入的目标。 应首选导入的目标名称,而不是在CMake命令(如target_link_libraries)中使用Qt5 <Module> _LIBRARIES等变量。 可以使用LOCATION属性获取库的实际路径:

find_package(Qt5Core)

get_target_property(QtCore_location Qt5::Core LOCATION)

但请注意,很少需要CMake代码中库的完整位置。 大多数CMake API都知道导入的目标,并且可以自动使用它们而不是完整路径。

Qt 5中的每个模块都有一个库目标,其命名约定为Qt5 :: <Module>,可用于此目的。

使用配置Qt的配置创建导入的目标。 也就是说,如果使用-debug开关配置Qt,则将创建具有配置DEBUG的导入目标。 如果使用-release开关配置Qt,则将创建具有RELEASE配置的导入目标。 如果Qt配置了-debug-and-release开关(Windows上的默认值),则将使用RELEASE和DEBUG配置创建导入的目标。

如果您的项目具有自定义CMake构建配置,则可能需要设置从自定义配置到调试或发布Qt配置的映射。

find_package(Qt5Core)

set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")

# set up a mapping so that the Release configuration for the Qt imported target is
# used in the COVERAGE CMake configuration.
set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")

插件也可作为CMake中的IMPORTED目标。 Qt网络,Qt SQL,Qt GUI和Qt Widgets模块具有相关的插件。 它们在Qt5 <Module> _PLUGINS变量中提供了一个插件列表

foreach(plugin ${Qt5Network_PLUGINS})
  get_target_property(_loc ${plugin} LOCATION)
  message("Plugin ${plugin} is at location ${_loc}")
endforeach()

变量参考
模块变量

find_package调用的结果是创建导入的目标以与target_link_libraries一起使用,一些变量将填充配置构建所需的信息,并且宏将可供使用。每个模块的导入目标的名称与前缀为“Qt5 ::”的模块名称匹配,例如Qt5 :: Widgets。所有特定于包的变量都具有一致的名称,并带有包名称的前缀。例如,如果成功找到,find_package(Qt5Widgets)将使以下变量可用:

    Qt5Widgets_VERSION描述模块版本的字符串。
    Qt5Widgets_LIBRARIES用于target_link_libraries命令的库列表。
    Qt5Widgets_INCLUDE_DIRS与include_directories命令一起使用的目录列表。
    Qt5Widgets_DEFINITIONS与add_definitions一起使用的定义列表。
    Qt5Widgets_COMPILE_DEFINITIONS与COMPILE_DEFINITIONS目标属性一起使用的定义列表。
    Qt5Widgets_FOUND描述模块是否成功找到的布尔值。
    Qt5Widgets_EXECUTABLE_COMPILE_FLAGS构建可执行文件时要使用的标志字符串。

使用find_package调用找到的所有包都可以使用这些变量的等价物。请注意,变量区分大小写。
安装变量

此外,还有一些其他变量可用,这些变量与特定包无关,而与Qt安装本身有关。

    QT_VISIBILITY_AVAILABLE描述Qt是否使用隐藏可见性构建的布尔值。
    QT_LIBINFIX包含库名称中使用的中缀的字符串。

宏参考
Qt5Core宏

找到Qt5Core时可用的宏。

:http://doc.qt.io/qt-5/cmake-manual.html

猜你喜欢

转载自blog.csdn.net/qq_38446366/article/details/81566710