Loading

CMake使用

构建目标和属性

project

project(<项目名称> [<编程语言>...])
project(<项目名称>
        [VERSION <主版本号>[.<次版本号>[.<补丁版本号>[.<修订版本号>]]]]
        [DESCRIPTION <项目描述>]
        [HOMEPAGE_URL] <项目主页URL>
        [LANGUAGES <编程语言>...])

当无须声明各种属性时,第一种形式最简便,编程语言参数支持C、CXX、CUDA、OBJC、OBJCXX、Fortran、HIP、ISPC和ASM。

add_executable

add_executable(<目标名称> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [<源文件>...])

该命令创建一个可执行文件类型的构建目标,其中第一个参数是必选参数,目标名称并不一定是最终的可执行文件的名称,因可通过OUTPUT_NAME目标属性来修改。源文件可暂时省略,可通过target_source命令设置源程序。

add_library

add_library(<目标名称> <库类型> [EXCLUDE_FROM_ALL] [<源文件>...])

该命令会创建一个静态库|动态库|模块库类型的构建目标,<库类型>对应取值STATIC|SHARED|MODULE。

add_library(<目标名称> OBJECT [<源文件>...])

该命令会创建一个目标文件库的构建目标,该命令仅编译其包含的源文件,生成一系列的目标文件,并不会将这些目标文件打包或链接到某个库文件中。

include_directories

include_directories([AFTER|BEFORE] [SYSTEM] <目录>...)

该命令仅对当前目录及其子目录中的构建目标生效,用于将<目录>设置为构建目标的头文件搜索目录

target_include_directories

target_include_directories(<构建目标> 
    [SYSTEM] [AFTER|BEFORE] <PRIVATE|INTERFACE|PUBLIC> <目录> ... 
    [<PRIVATE|INTERFACE|PUBLIC> <目录>...]...)

该命令用于将<目录>加入到<构建目标>的头文件搜索目录列表中

target_link_directories(<构建目标> [BEFORE] 
    <PRIVATE|INTERFACE|PUBLIC> <目录>... 
    [<PRIVATE|INTERFACE|PUBLIC> <目录>...]...)

该命令用于将<目录>设置为<构建目标>的链接库搜索目录

target_sources

target_sources(<构建目标>
    <PRIVATE|INTERFACE|PUBLIC> <源文件>...
    [<PRIVATE|INTERFACE|PUBLIC> <源文件>...]...)

该命令用于设置构建目标所需的源文件

指定源文件方式

aux_source_directory

aux_source_directory(<目录> <结果变量>)

该命令用于遍历指定目录中的源文件,并将它们的路径存入结果变量中。若增添源文件,使用该命令不会引起CMakeLists.txt改变,可能不会重新构建。

add_subdirectory

add_subdirectory(<源文件目录> [<二进制目录>] [EXECLUDE_FROM_ALL])

该命令用于将源文件目录这个子目录加入项目,该子目录中必须含有一个CMake目录程序,当CMake执行该命令时,会立即进入子目录执行这个目录程序,当前目录程序的执行会暂停。

message

显示信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message内容")

option

用于定义布尔型选项,可以在构建项目时启用或禁用特定的功能

# option_variable:选项变量的名称
# description:选项的描述
# initial_value:选项的初始值,通常是ON或OFF
option(<option_variable> "description" <initial_value>)

以是否启用日志功能为例:

option(ENABLE_LOGGING "Enable logging functionality" ON)

在CMakeLists.txt中可以通过if语句来使用这个选项:

if(ENABLE_LOGGING)
  # 这个函数会定义一个宏,在代码中可以判断该宏
  add_definitions(-DENABLE_LOGGING)
endif()

在使用CMake命令构建项目时可在命令行来启用或禁用option

cmake -DENABLE_LOGGING=OFF ..

CMake常用模块

find_package

用来寻找引用的外部库,包括头文件路径、链接库路径等。但是想要通过该命令寻找到库,需要库作者能提供XXXConfig.cmakeFindXXX.cmake配置文件。

# 以寻找googletest库为例
# REQUIRED参数表名如果没找到就不会向下执行
find_package(GTest REQUIRED)
include_directories(${GTest_INCLUDE_DIRS})
target_link_libraries(exec_name ${GTest_LIBS})
posted @ 2024-10-09 11:39  songlh424  阅读(40)  评论(0)    收藏  举报