CMake的语法简明教程
CMake 语法基础
- 命令格式:CMake 命令不区分大小写,由命令名称、小括号和参数组成,参数之间使用空格或分号分隔。例如
add_executable(MyExecutable main.cpp other_file.cpp)
。 - 注释:以
#
开头的内容为注释,例如# 这是一条注释
。 - 变量
- 定义变量:使用
set
命令,如set(MY_VAR "Hello World")
。 - 使用变量:在大多数情况下,使用
${}
来引用变量,如message(STATUS "Variable MY_VAR is ${MY_VAR}")
。 - 缓存变量:
set(MY_CACHE_VAR "DefaultValue" CACHE STRING "A cache variable")
。
- 定义变量:使用
CMake 常用命令
- cmake_minimum_required:指定 CMake 的最低版本要求,如
cmake_minimum_required(VERSION 3.10)
。 - project:定义项目的名称和使用的编程语言,如
project(MyProject CXX)
。 - add_executable:指定要生成的可执行文件和其源文件,如
add_executable(MyExecutable main.cpp other_file.cpp)
。 - add_library:创建一个库(静态库或动态库)及其源文件,如
add_library(MyLibrary STATIC library.cpp)
。 - target_link_libraries:链接目标文件与其他库,如
target_link_libraries(MyExecutable MyLibrary)
。 - include_directories:添加头文件搜索路径,如
include_directories(${PROJECT_SOURCE_DIR}/include)
。 - target_include_directories:更具体地设置目标的头文件包含路径,如
target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)
。 - install:定义安装规则,如
install(TARGETS MyExecutable RUNTIME DESTINATION bin)
。 - if-else-endif:条件语句,如
if(CMAKE_BUILD_TYPE STREQUAL "Debug") message("Debug build") endif()
。 - add_custom_command:自定义命令,如
add_custom_command(TARGET MyExecutable POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Build completed.")
。
CMake 教程
- 创建项目目录结构:在项目根目录下,通常会有
src
目录存放源文件,include
目录存放头文件,在根目录创建CMakeLists.txt
文件。 - 编写 CMakeLists.txt
- 最低版本要求与项目名称定义:
cmake_minimum_required(VERSION 3.10)
,project(MyProject)
。 - 添加可执行文件:若
src
目录下有main.cpp
,add_executable(MyExecutable src/main.cpp)
。 - 添加库:若要创建静态库,
add_library(MyStaticLib STATIC src/library.cpp)
;若要创建动态库,add_library(MySharedLib SHARED src/library.cpp)
。 - 链接库:
target_link_libraries(MyExecutable MyStaticLib)
。 - 添加头文件路径:
include_directories(include)
或target_include_directories(MyExecutable PRIVATE include)
。
- 最低版本要求与项目名称定义:
- 构建项目
- 在命令行中进入项目根目录,执行
mkdir build
创建构建目录。 - 进入构建目录
cd build
。 - 运行
cmake..
生成构建文件。 - 在 Linux 上执行
make
命令进行编译,在 Windows 上可以使用cmake --build.
或打开生成的 Visual Studio 项目文件进行编译。
- 在命令行中进入项目根目录,执行
转载请注明来源,谢谢。
有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:jishurizhi@outlook.com。