CMakeLists

发布时间:2024年01月02日

1.?cmake_minimum_required()??指定需要的cmake最低版本

cmake_minimum_required (VERSION 3.10 FATAL_ERROR)
//cmake_minimum_required()函数定义需要的CMake版本。如上需要版本3.10或更高版本

2.project()定义项目名

project (MxNaviViewer)  //project() 函数定义了项目的名称为MxNaviViewer

3.message() 函数用于打印一条消息,STATUS 参数指定了消息的等级,表示该消息为重要信息。消息的内容是 MxNvaiviewer Source:${CMAKE_CURRENT_SOURCE_DIR},其中 ${CMAKE_CURRENT_SOURCE_DIR} 是 CMake 内置变量,用于获取当前正在处理的源文件所在的目录路径。

message(STATUS "MxNvaiviewer Source:${CMAKE_CURRENT_SOURCE_DIR}")

4.find_package 是 CMake 提供的一个用于查找外部软件包或库的功能,如找Qt5

find_package (Qt5 COMPONENTS //COMPONENTS参数用于指定要查找的软件包或库所需的组件
  Core 
  Gui 
  Widgets  
  OpenGL
  REQUIRED)//REQUIRED参数表示这些模块是必需的,找不到它们,CMake构建过程会中止并报错

find_package(OpenGL REQUIRED) //构建时查找openGL库,加载到cmake项目中

5.set 命令来设置一个变量 CMAKE_AUTOUIC_SEARCH_PATHS 的值为 ${CMAKE_CURRENT_SOURCE_DIR}

set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR})
#${CMAKE_CURRENT_SOURCE_DIR} 是CMake内置变量,表示当前正在处理的源文件所在的目录路径
# source files   cmakelists中用#注释
set(_soruce_files 
MxNaviViewer.ui
source/main.cpp
)# 定义一个变量_source_files,并包含了两个文件MxNaviViewer.ui和source/main.cpp
# header files
set(_header_files 
include/Painter/MxNavi3DPainter.h
include/Painter/MxNaviCollector.h
)#同上

6.?add_executable?用于创建一个可执行文件目标

add_executable(${PROJECT_NAME} WIN32 ${_header_files} ${_soruce_files} ${_qrc_files})

#${PROJECT_NAME} 是一个变量,用于指代当前项目的名称,这里设置成可执行文件名称
#通过在 add_executable 指令中指定以上参数,可以将头文件、
#源文件和资源文件添加到可执行文件目标中,以便在项目构建过程中进行编译和链接。

7.add_subdirectory()?命令来向当前项目添加一个子目录,并在子目录中构建目标。

add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/source/framework framework_obj)
# ${CMAKE_CURRENT_LIST_DIR}是一个变量,表示当前CMakeLists.txt文件所在的目录的路径
# ${CMAKE_CURRENT_LIST_DIR}/source/framework 是子目录的路径,
# framework_obj 是该子目录中生成的目标名称。

# 主要功能是: 
告诉CMake构建系统将${CMAKE_CURRENT_LIST_DIR}/source/framework目录添加到当前项目的构建中。
执行${CMAKE_CURRENT_LIST_DIR}/source/framework/CMakeLists.txt文件中的指令。
在 framework_obj 目标中导出库文件、可执行文件和其它生成文件。

子目录中的CMakeLists.txt文件通常会定义生成库、可执行文件和其它相关构建目标的规则以及指定安装规则等。
在执行 add_subdirectory 命令时CMake 会进入子目录并执行子目录中的 CMakeLists.txt 文件

8.target_include_directories?用于为目标(例如可执行文件或库)添加包含目录。

????????在编译过程中,${PROJECT_NAME} 目标以及使用该目标的其他目标就可以使用这些包含目录中的头文件了。

target_include_directories (${PROJECT_NAME} PUBLIC 
include
source
)
#${PROJECT_NAME} 是一个变量,用于指代当前项目的名称
#PUBLIC 是一个关键字,用于指定包含目录的属性,PUBLIC 表示这些包含目录将对当前目标以及使用该目标的其他目标都可见
#通过在target_include_directories指令中指定以上参数,可以将指定的目录路径添加到 ${PROJECT_NAME}目标的包含目录中

9.?target_link_libraries 命令来为指定的目标(可执行文件或库)添加链接库,CMake 将会自动将这些库与 ${PROJECT_NAME} 目标进行链接。这样,在构建过程中,${PROJECT_NAME} 目标就能够正确地使用这些库提供的功能了。

target_link_libraries(${PROJECT_NAME} PRIVATE
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
nds_sqlite3 
Qt5::OpenGL
${OPENGL_LIBRARIES}
)
#${PROJECT_NAME} 是一个变量,表示当前项目的名称
#PRIVATE 是一个关键字,用于指定链接库的属性。在这里,PRIVATE 表示这些链接库只会应用于 ${PROJECT_NAME}目标本身,而不会传递给依赖于${PROJECT_NAME}的其他目标
#${CMAKE_LIBRARY_OUTPUT_DIRECTORY}是一个提前设置好的变量,
#表示CMake构建过程中生成的库文件的输出目录
#通过使用该变量,可以将构建生成的库文件放置在指定的输出目录中,而不是默认的构建目录。
# 后三个参数都是需要链接的库的名称或者变量

10.add_custom_command() 用于在构建过程中添加自定义的构建命令.如下

该命令将在构建目标之后执行,并将执行一个复制操作将?${CMAKE_CURRENT_SOURCE_DIR}/cache?目录中的内容复制到?${TARGET_OUTPUT_DIRECTORY_ROOT}/cache?目录中。

add_custom_command(TARGET ${PROJECT_NAME}
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/cache" "${TARGET_OUTPUT_DIRECTORY_ROOT}/cache"
  COMMENT "Copy the cache files!"
  )
#TARGET 是 add_custom_command 命令的一个关键字,用于指定要添加自定义命令的目标
#POST_BUILD是add_custom_command命令的一个选项,用于指定该自定义命令应该在构建目标后执行
#COMMENT 关键字用于为此自定义命令添加注释,以提供额外的说明

文章来源:https://blog.csdn.net/C18304057755/article/details/135344651
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。