CMakeList.txt速查速解

目录

一、概述

二、常见的命令和参数

三、实例详解

四、其他参数补充


一、概述

当在一个 CMake 项目中使用 CMake 构建系统时,需要创建一个名为 CMakeLists.txt 的文件来定义项目的结构、配置和构建过程。CMakeLists.txt 文件是一个文本文件,它使用 CMake 语法来描述项目的构建规则和依赖关系。

二、常见的命令和参数

`CMakeLists.txt` 文件中可以使用多种命令和参数来定义项目的结构、配置和构建过程。下面是一些常用的 CMake 命令和参数的解释:

1. `cmake_minimum_required(VERSION )`:

指定所需的最低 CMake 版本。比如 `cmake_minimum_required(VERSION 3.12)` 表示项目需要使用至少版本号为 3.12 的 CMake。

2. `project( [VERSION ] [LANGUAGES ])`:

设置项目的名称和相关选项。可以使用 `project()` 设置项目的名称,可选地可以使用 `VERSION` 指定项目的版本号,还可以使用 `LANGUAGES` 指定要使用的编程语言。

3. `add_executable( [source1] [source2] ...)`:

添加一个可执行文件。可以指定一个或多个源文件将被编译成可执行文件。

4. `add_library( [SHARED|STATIC|MODULE] [source1] [source2] ...)`:

添加一个库文件。可以指定一个或多个源文件将被编译成库文件,还可以使用 `SHARED`、`STATIC` 或 `MODULE` 参数来指明要生成的库文件类型。

5. `target_link_libraries( ...)`:

配置链接库。将目标文件与库文件进行链接,使得目标可以使用这些库中定义的函数和符号。

6. `include_directories( [dir2] ...)`:

指定要包含的头文件目录。可以指定一个或多个目录,以供编译器搜索头文件。

7. `link_directories( [dir2] ...)`:

指定要链接的库文件目录。可以指定一个或多个目录,以供链接器搜索库文件。

8. `target_include_directories( [dir2] ...)`:

为指定的目标设置包含目录。可以使用 `INTERFACE`、`PUBLIC` 或 `PRIVATE` 来控制这些包含目录的范围。

9. `target_link_directories( [dir2] ...)`:

为指定的目标设置链接目录。可以使用 `INTERFACE`、`PUBLIC` 或 `PRIVATE` 来控制这些链接目录的范围。

10. `set( )`:

设置一个变量的值。可以使用 `set( CACHE [FORCE])` 来设置一个缓存变量。

三、实例详解

cmake_minimum_required(VERSION 3.0)
project(TestDemo)

get_filename_component(SDKLibPath "../../sdk/lib/libTestSDK.so" ABSOLUTE)

include_directories(../../sdk/inc)
include_directories(../..)

aux_source_directory(../../case DEMO_SRCS)
aux_source_directory(../.. DEMO_SRCS)

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")

add_compile_options("-Wno-format-zero-length")

add_executable(TestDemo ${DEMO_SRCS})

target_link_libraries(TestDemo gtest)
target_link_libraries(TestDemo pthread)
target_link_libraries(TestDemo dl)
target_link_libraries(TestDemo ${SDKLibPath})

如果看不懂,看下面解释,回过头再看! 

cmake_minimum_required(VERSION 3.0)

这个命令指定了所需的最低 CMake 版本为 3.0。

project(TestDemo)

这个命令设置项目的名称为 “TestDemo”。

get_filename_component(SDKLibPath "../../sdk/lib/libTestSDK.so" ABSOLUTE)

这个命令获取指定路径下的文件的绝对路径。它将 “…/…/sdk/lib/libTestSDK.so” 的绝对路径存储在变量 SDKLibPath 中。

include_directories(../../sdk/inc)
include_directories(..)

这两个命令用于添加头文件目录。它们将 “../../sdk/inc” 和 “..” 目录添加到编译器用于搜索头文件的目录列表中。

aux_source_directory(../../case DEMO_SRCS)
aux_source_directory(.. DEMO_SRCS)

这两个命令用于自动将指定目录中的源文件添加到变量中。它们将 “../../case” 和 “..” 目录中的源文件添加到变量 DEMO_SRCS 中。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")

这两个命令用于设置编译器的编译选项。它们将 -fsanitize=address -fno-omit-frame-pointer -static-libasan 选项添加到 C 和 C++ 编译器的选项中。

add_compile_options("-Wno-format-zero-length")

这个命令用于添加编译选项。它将 -Wno-format-zero-length 选项添加到编译器的选项中,用于禁止对零长度格式字符串的警告。

add_executable(TestDemo ${DEMO_SRCS})

这个命令用于添加一个可执行文件 TestDemo,它的源文件是 DEMO_SRCS 变量中指定的源文件。

target_link_libraries(TestDemo gtest)
target_link_libraries(TestDemo pthread)
target_link_libraries(TestDemo dl)
target_link_libraries(TestDemo ${SDKLibPath})

这四个命令用于配置链接库。它们将 gtestpthreaddl 和 ${SDKLibPath}(即之前获取到的绝对路径)链接到可执行文件 TestDemo 中,使得可执行文件能够使用这些库中定义的函数和符号。

四、其他参数补充

不断更新中......

你可能感兴趣的:(linux基础与进阶,linux)