目录
一、概述
二、常见的命令和参数
三、实例详解
四、其他参数补充
当在一个 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(
设置项目的名称和相关选项。可以使用 `project(
3. `add_executable(
添加一个可执行文件。可以指定一个或多个源文件将被编译成可执行文件。
4. `add_library(
添加一个库文件。可以指定一个或多个源文件将被编译成库文件,还可以使用 `SHARED`、`STATIC` 或 `MODULE` 参数来指明要生成的库文件类型。
5. `target_link_libraries(
配置链接库。将目标文件与库文件进行链接,使得目标可以使用这些库中定义的函数和符号。
6. `include_directories(
指定要包含的头文件目录。可以指定一个或多个目录,以供编译器搜索头文件。
7. `link_directories(
指定要链接的库文件目录。可以指定一个或多个目录,以供链接器搜索库文件。
8. `target_include_directories(
为指定的目标设置包含目录。可以使用 `INTERFACE`、`PUBLIC` 或 `PRIVATE` 来控制这些包含目录的范围。
9. `target_link_directories(
为指定的目标设置链接目录。可以使用 `INTERFACE`、`PUBLIC` 或 `PRIVATE` 来控制这些链接目录的范围。
10. `set(
设置一个变量的值。可以使用 `set(
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})
这四个命令用于配置链接库。它们将 gtest
、pthread
、dl
和 ${SDKLibPath}
(即之前获取到的绝对路径)链接到可执行文件 TestDemo
中,使得可执行文件能够使用这些库中定义的函数和符号。
不断更新中......