CMakeLists的构建

1. CMake常见的变量

在 CMake 中,有许多常见的变量可用于配置和管理构建过程。以下是一些常见的变量,包括当前源码路径:

CMAKE_SOURCE_DIR:当前 CMakeLists.txt 所在的源码目录的根路径。
CMAKE_BINARY_DIR:构建目录的根路径,即构建生成的可执行文件、库和其他构建输出的存放位置。
CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的源码目录的路径。
CMAKE_CURRENT_BINARY_DIR:当前处理的 CMakeLists.txt 所在的构建目录的路径。
CMAKE_CURRENT_LIST_DIR:当前处理的 CMakeLists.txt 所在的路径(源码目录或构建目录)。
CMAKE_CURRENT_LIST_LINE:当前正在处理的 CMakeLists.txt 的行号。
CMAKE_MODULE_PATH:一个用于指定额外的 CMake 模块(.cmake 文件)的搜索路径的列表。
CMAKE_INCLUDE_CURRENT_DIR:如果设置为 ON,则在构建过程中自动将当前处理的 CMakeLists.txt 所在的目录添加到包含路径中。
CMAKE_LIBRARY_OUTPUT_DIRECTORY:库文件的输出目录。
CMAKE_RUNTIME_OUTPUT_DIRECTORY:可执行文件的输出目录。

2. 宏

(1).cmake_minimum_required(VERSION 3.17):设置cmake的最小版本
(2).project("Gtest"):设置工程名称
(3).include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../../../include/ ):可以使用 include_directories 命令来指定自定义的头文件路径。该命令会将指定的路径添加到编译器的头文件搜索路径中。
(4).file(GLOB sources ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/*.cpp ):file GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件,命令行格式:
file(GLOB <variable> [LIST_DIRECTORIES true[false]] [RELATIVE <path> ] [CONFIGURE_DEPENDS] [<globbing-expression> ...])
LIST_DIRECTORIES true[false]: 如果为false,目录将会被省略,默认情况下返回是带目录
RELATIVE : 相对路径 返回的结果将不是绝对路径,而是将绝对路径中的 部分去掉,返回相对路径
CONFIGURE_DEPENDS:如果该标记位设置,在主构建系统检查目标添加逻辑,必便在构建时重新运行标记的GLOB命令
globbing-expression:匹配表达式,表达式类似与正则匹配,如下:

*.cxx      - match all files with extension cxx
*.vt?      - match all files with extension vta,...,vtz
f[3-5].txt - match files f3.txt, f4.txt, f5.txt

(5).find_package(OpenCV REQUIRED):命令可以用于查找和加载外部库,以上命令会在系统中查找安装的OpenCV 库
(6).add_executable(MyExecutable main.cpp):添加可执行文件
(7).target_link_libraries(MyExecutable PUBLIC ${OpenCV_LIBS}):将OpenCV库链接到我们的可执行文件MyExecutable中
(8).add_difinitions():用于向编译器添加预定义的宏定义,通过使用add_definitions命令,您可以在构建过程中定义一些全局的宏,这些宏将在所有源文件中可见。例子:

# 添加宏定义
add_definitions(-DMY_MACRO)

在上述示例中,通过add_definitions(-DMY_MACRO)命令,我们定义了一个名为MY_MACRO的宏。通过在源代码中使用#ifdef和#ifndef等条件预处理指令,您可以根据宏的定义情况来选择不同的代码路径。例如:

#ifdef MY_MACRO
    // 如果MY_MACRO已定义,则执行此处的代码
    // ...
#else
    // 如果MY_MACRO未定义,则执行此处的代码
    // ...
#endif

(9).set_target_properties:用于设置目标(例如可执行文件、库等)的属性。通过使用set_target_properties命令,您可以定制化目标的属性, 如设置输出目录、编译选项、链接选项等。
以下是一个使用set_target_properties命令的示例:

cmake_minimum_required(VERSION 3.0)
project(MyProject)

# 添加可执行文件
add_executable(my_executable main.cpp)

# 设置目标属性
set_target_properties(my_executable PROPERTIES
    OUTPUT_NAME "my_executable"                # 设置输出文件名为my_executable
    RUNTIME_OUTPUT_DIRECTORY "bin"             # 设置输出目录为bin
    CXX_STANDARD 17                            # 设置使用C++标准为C++17
    COMPILE_FLAGS "-Wall"                      # 设置编译选项,开启所有的警告信息
    LINK_FLAGS "-L/usr/local/lib"              # 设置链接选项,指定额外的库搜索路径
)

# 链接第三方库
target_link_libraries(my_executable my_library)

在上述示例中,通过set_target_properties命令,我们设置了my_executable这个目标的属性。例如,我们设置了输出文件名为my_executable,输出目录为bin,在编译时开启了所有的警告信息,并指定了额外的库搜索路径。您可以根据需要设置目标的各种属性,以满足项目的要求.

(10)aux_source_directory
aux_source_directory函数用于将指定目录下的源代码文件自动添加到一个变量中。这个函数可以简化在CMakeLists.txt中列举每个源文件的过程.

# 将指定目录下的源文件添加到变量SOURCES中
aux_source_directory(src SOURCES)

# 添加可执行文件,并将SOURCES变量传递给它
add_executable(myexe ${SOURCES})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值