当前位置:网站首页 > 云服务教程 > 正文

cmake 中文教程(cmake documentation)



点击上方“机械电子工程技术”关注我们




CMake是一个免费的多平台编译工具,旨在构建、测试和软件打包。CMake是用于控制软件使用简单的平台和编译器编译过程独立配置文件。CMake生成本机makefile和 工作区,可以使用您所 选择的编译器环境。
通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make 命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。

1、宏功能

PROJECT_SOURCE_DIR

使用cmake命令后紧跟的目录,一般是工程的根目录

PROJECT_BINARY_DIR

执行cmake命令的目录

CMAKE_CURRENT_SOURCE_DIR

当前处理的CMakeLists.txt所在的路径

CMAKE_CURRENT_BINARY_DIR target

编译目录

EXECUTABLE_OUTPUT_PATH

重新定义目标二进制可执行文件的存放位置

LIBRARY_OUTPUT_PATH

重新定义目标链接库文件的存放位置

PROJECT_NAME

返回通过PROJECT指令定义的项目名称

CMAKE_BINARY_DIR

项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径

2、常用命令

CMake 使用 # 进行行注释,可以放在任何位置。

CMake 使用 #[[ ]] 形式进行块注释。

指定使用的 cmake 的最低版本

cmake_minimum_required

定义工程会生成一个可执行程序

add_executable(可执行程序名 源文件名称)

指定使用的C++标准

set(CMAKE_CXX_STANDARD 11)

定义变量

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

set(SRC_LIST add.c div.c main.c mult.c sub.c)

set(SRC_LIST add.c;div.c;main.c;mult.c;sub.c)

add_executable(app ${SRC_LIST})

指定输出的路径

set(HOME /home/robin/Linux/Sort)

set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)

查找某个路径下的所有源文件

aux_source_directory(< dir > < variable >)

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)

add_executable(app ${SRC_LIST})

file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)

file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)

file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)

包含头文件

include_directories(headpath)

include_directories(${PROJECT_SOURCE_DIR}/include)

制作静态库

add_library(库名称 STATIC 源文件1 [源文件2] ...)

制作动态库

add_library(库名称 SHARED 源文件1 [源文件2] ...)

指定静态库和动态库输出的路径

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

包含静态库文件

link_libraries(<static lib> [<static lib>...])

link_directories(<lib path>)

link_directories(${PROJECT_SOURCE_DIR}/lib)

link_libraries(calc)

包含动态库文件

target_link_libraries(A B C)

target_link_libraries(D A)

target_link_libraries(app pthread)

宏定义

add_definitions(-D宏名称)


3、案例

3.1单个源文件

第一步:编写源代码,demo1文件夹下只有一个源文件main.c,内容如下:
#include <stdio.h>#include <stdlib.h>
/ * power - Calculate the power of number. * @param base: Base value. * @param exponent: Exponent value. * * @return base raised to the power exponent. */double power(double base, int exponent){ int result = base; int i; if (exponent == 0) { return 1; } for(i = 1; i < exponent; ++i){ result = result * base; }
return result;}
int main(int argc, char *argv[]){ if (argc < 3){ printf("Usage: %s base exponent \n", argv[0]); return 1; } double base = atof(argv[1]); int exponent = atoi(argv[2]); double result = power(base, exponent); printf("%g ^ %d is %g\n", base, exponent, result); return 0;}

第二步:编写 CMakeLists.txt 文件,并保存在与 main.cc 源文件同个目录下:

# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)
# 项目信息project (Demo1)
# 指定生成目标add_executable(Demo main.cc)
CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。对于上面的 CMakeLists.txt 文件,依次出现了几个命令:
cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;
project:参数值是 Demo1,该命令表示项目的名称是 Demo1 。
add_executable:将名为 main.cc 的源文件编译成一个名称为 Demo 的可执行文件。
第三步:在当前目录执行 cmake . ,得到 Makefile 后再使用 make 命令编译得到 Demo1 可执行文件。

注意:

  • cmake .. 表示在上一级目录中查找 CMakeLists.txt 文件。
  • cmake . 表示在当前目录中查找 CMakeLists.txt 文件。
3.2同一目录,多个源文件

第一步:编写源代码,demo2文件夹下有三个文件,main.c/MathFunctions.c/MathFunctions.h

第二步:编写 CMakeLists.txt 文件,并保存在与 main.cc 源文件同个目录下:

# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)
# 项目信息project (Demo2)
# 指定生成目标add_executable(Demo main.cc MathFunctions.cc)

查找指定目录下的所有源文件

# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)
# 项目信息project (Demo2)
# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)
# 指定生成目标add_executable(Demo ${DIR_SRCS})

第三步:在当前目录执行 cmake .

3.3多个目录,多个源文件

第一步:编写源代码,demo3文件夹下有一个文件main.c和一个文件夹math,math文件夹下有两个文件MathFunctions.c/MathFunctions.h

第二步:编写 CMakeLists.txt 文件,并保存在与 main.cc 源文件同个目录下:

# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)
# 项目信息project (Demo3)
# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)
# 添加 math 子目录add_subdirectory(math)
# 指定生成目标 add_executable(Demo main.cc)
# 添加链接库target_link_libraries(Demo MathFunctions)
第三步:在当前目录执行 cmake .
参考文献
1、https://subingwen.cn/cmake/CMake-primer/

想了解更多

赶紧扫码关注

到此这篇cmake 中文教程(cmake documentation)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 华为模拟器使用教程(华为模拟器使用教程图片)2025-03-01 17:45:04
  • cmake教程pdf(cmake教程 多层目录)2025-03-01 17:45:04
  • 2258xt量产工具视频(2258xt量产教程)2025-03-01 17:45:04
  • keil破解(keil破解安装教程)2025-03-01 17:45:04
  • exe如何反编译为源码(exe反编译成源码详细教程)2025-03-01 17:45:04
  • 跳转链接怎么制作视频(跳转链接怎么制作视频教程)2025-03-01 17:45:04
  • 程序员入门教程视频(《程序员教程》)2025-03-01 17:45:04
  • keil软件破解教程(keil lib破解)2025-03-01 17:45:04
  • 2258XT开卡报错(2258xt开卡详细教程)2025-03-01 17:45:04
  • 2263xt开卡(2263xt开卡教程)2025-03-01 17:45:04
  • 全屏图片