CMake使用

阅读(23)
评论(0)
Beginning

构建目标和属性#

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 @   songlh424  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
more_horiz
keyboard_arrow_up light_mode menu palette
选择主题
点击右上角即可分享
微信分享提示