CMake是一个跨平台的开源构建工具,可自动生成与平台相关的Makefile或其他构建文件,从而使您可以使用相同的CMakeList.txt文件在不同的操作系统和编译器上构建您的项目。以下是一些常用的CMake命令和教程资源,可以帮助初学者掌握和使用Cmake工具。
在教程资源中,包含了中文教程,对看英文头疼的人比较友好
常用命令:
1. cmake . # 在当前目录下生成Makefile
2. cmake -G “Generator” . # 指定生成器,如Ninja、Visual Studio等
3. make # 构建项目
4. make install # 安装项目
5. cmake --build . --target xxxx # 构建指定目标
6. cmake --list-commands # 列出所有可用的CMake命令
7. cmake --help-command=xxxx # 查看特定命令的详细帮助文档
常用变量:
CMAKE_SOURCE_DIR
:项目根目录的绝对路径。该变量指向 CMakeLists.txt 文件所在的目录,即项目根目录,可以在 CMakeLists.txt 中使用。CMAKE_BINARY_DIR
:构建目录的绝对路径。该变量指向在构建项目时所使用的编译器所在目录,可以在 CMakeLists.txt 中使用。PROJECT_NAME
:项目名称,由 CMakeLists.txt 文件中的 project 命令指定。您可以使用该变量在代码中引用项目名称,如取代硬编码的名称。CMAKE_BUILD_TYPE
:当前构建类型,如 Debug 或 Release。该变量指定了当前编译器所使用的编译选项,如优化等级、调试符号等。可以在命令行中设置该变量的值。CMAKE_INSTALL_PREFIX
:安装目录,由 install 命令指定,默认为 /usr/local。该变量指定了 make install 命令将项目安装到的目录,可以在 CMakeLists.txt 中显示地设置。CMAKE_C_COMPILER
:C 编译器的可执行文件路径。该变量指向当前项目所使用的 C 编译器的可执行文件路径。CMAKE_CXX_COMPILER
:C++ 编译器的可执行文件路径。该变量指向当前项目所使用的 C++ 编译器的可执行文件路径。CMAKE_SYSTEM_NAME
:当前系统名称,如 Linux、Windows 等。该变量指定了当前系统的名称,并且会根据不同的系统设置不同的编译器和选项。CMAKE_MODULE_PATH
:CMake 模块路径列表。该变量指向可以在 CMakeLists.txt 文件中调用的 “.cmake” 模块文件的目录列表。
常用函数:
include_directories(dir1 [dir2 …])
:添加头文件搜索路径。该函数用于添加头文件的搜索路径,一般情况下会加在 add_library 或 add_executable 命令之前,在 target_include_directories 命令之后。add_subdirectory(path)
:添加子目录并处理子目录的 CMakeLists.txt 文件。这个函数用于添加子目录并执行该子目录下的 CMakeLists.txt 文件。add_executable(name [src1] [src2] …)
:创建可执行文件。该函数用于生成可执行文件,它接受一个目标名称和源文件列表,生成一个可执行文件。add_library(name [STATIC | SHARED | MODULE] [src1] [src2] …)
:创建库文件,静态库、动态库和插件。该函数用于生成库文件,它接受一个目标名称、库类型和源文件列表,生成一个库文件。target_link_libraries(target lib1 [lib2 …])
:链接库文件。该函数用于将库文件链接到指定的目标文件。file(GLOB SRCS “*.cpp”)
:找到指定目录下的所有符合条件的文件。该函数用于返回指定目录下的所有符合条件的文件列表。在上面的示例中,该函数将 *.cpp 全部替换为当前目录下的所有 “.cpp” 文件的名称和路径。file(MAKE_DIRECTORY dir)
:创建指定目录。该函数用于在目标目录或配置文件目录中创建指定的目录。find_package(PackageName [version] [EXACT] [QUIET] [REQUIRED])
:查找第三方库包。该函数用于在当前平台上查找所需的库,如 OpenSSL、Boost、Qt 等。add_definitions(-DDEFINITION)
:定义预处理器宏。该函数用于添加含有系统特定功能声明的库,对于允许预处理器的编译器非常有用。target_sources(target_name PRIVATE srcs…)
:为目标添加源文件。该函数可以向当前目标(可执行文件或库)添加源文件,PRIVATE 表示这些源文件只对当前目标可见。
此外,CMake 还提供了许多其他的变量和函数,可以根据项目的实际需求灵活使用。可以在 CMake 官方文档中查看更多的变量和函数:https://cmake.org/documentation/manual/latest/variables/index.html 和 https://cmake.org/documentation/manual/latest/command/
教程资源:
- CMake官方文档:https://cmake.org/documentation/
- CMake教程:https://cmake.org/cmake-tutorial/
- CMake入门指南:https://cliutils.gitlab.io/modern-cmake/
- Modern Cmake中文版(推荐):https://www.bookstack.cn/read/Modern-CMake-CN-Modern-CMake-zh_CN/08ad6f6237beace2.md
- CMake 的使用实例,可以加深理解:全网最细的CMake教程!(强烈建议收藏) - 知乎 (zhihu.com)
- CMake cookbook:https://www.brianlheim.com/2018/04/09/cmake-cookbook.html
- CMake cookbook中文版Introduction - 《CMake菜谱(CMake Cookbook中文版)》 - 书栈网 · BookStack
建议看看两个中文版的教程**(4、8),结合5**加深理解