CMake教程:\Tools\Work\cmake
CMake官方文档:https://cmake.org/cmake/help/latest/
一、基础介绍
1、可以用于引入第三方库,例如:配置openCV环境
set(OpenCV_DIR /Libs/opencv)
find_package(OpenCV REQUIRED)
2、用于c/c++程序构建
二、环境配置
1、Linux
sudo apt install gcc g++ make
2、windows
安装工具MinGW,模仿Linux的操作内核
w64devkit: https//github.com/skeeto/w64devkit/releases
安装cMake: www.cmake.org/download
3、ubuntu
sudo apt install cmake
4、官方文档:https://cmake.org/cmake/help/latest/
下载练习教程www.cmake.org上找到resource->document and community->3.26->cmake tutorial->this archive
参照https://www.bilibili.com/video/BV1hz4y1H7YA/?p=3&spm_id_from=pageDriver&vd_source=1679b3ba961499787d9a94a675c509aa
解压下载的\Tools\Work\cmake\cmake-3.26.5-tutorial-source练习代码,在step1中
创建build目录
【练习1】 step1目录
修改CMakeLists.txt文件
cmake_minimum_required(VERSION 3.10) // 指定版本
project(Tutorial) // 指定项目名称
add_executable(Tutorial tutorial.cxx) // 添加项目文件 *.cxx
路径栏执行cmd.exe
cmake --version
rd /S /Q . // 清空当前目录 Remove-Item -Path .\* -Recurse -Force【在目录build中删除所有内容】
cmake -G "MinGW Makefiles" .. // 在build中生成makefile文件; 直接cmake不带参数,生成vs的项目;
// 不指定 -G 选项,要设置环境变量(在视频中找吧)
make(或者 mingw32-make) // 有makefile就可以make可执行程序了;如果生成了vs项目,
// 使用"cmake --build ."
// 来构建可执行程序,这是通用写法,什么项目都可以这么写
./Tutorial.exe 100
【练习2】 step1目录
在cmakelist.txt中指定C++11新特性
在项目中创建build目录并进入,打开cmd执行下面两条命令
rd /S /Q . // 清空当前目录
cmake -G "MinGW Makefiles" .. // 生成mingw项目
cmake --build . // 生成.exe
【练习3】 step1目录
在cxx文件中使用cmakelist.txt中定义的变量
cmake -G "MinGW Makefiles" .. // 生成mingw项目
当执行过上面语句后, 在build文件夹中有cmakecache.txt文件,可以直接使用"cmake ."进行重新生成
在cmakelist中设置程序版本号 project(Tutorial VERSION 3.58)
在cmakelist中输出版本信息 "message(STATUS "${Tutorial_VERSION_MAJOR}") # 3
在cmakelist中输出版本信息 "message(STATUS "${Tutorial_VERSION_MINOR}") # 58
【练习4】 step2目录
使用CMake创建动态库,然后,在主程序中调用!
【练习5】
链接库配置成可选项,在cmakelist.txt文件中定义是否使用!
在命令行指定makelist中的变量值
cmake .. -DUSE_MYMATH=ON // -D选项 USE_MYMATH是变量名
【练习6】
1、配置阶段
cmake -G "MinGW Makefiles" ..
检查编译器和工具链是否可用,并设置编译器选项和连接选项
检查系统库和第三方库是否可用,并设置库的路径和连接选项
检查项目的源代码文件并设置编译选项和连接选项
生成makefile 或者 ide 的项目文件
根据不同平台和编译器生成不同的makefile或者项目文件
2、生成阶段
cmake --build .
根据makefile或者项目文件中的指令和参数来编译源代码文件,生成目标文件
根据makefile 或者项目项目文件中的指令和参数来连接目标文件,生成可执行文件或库文件
生成器表达式 CMake生成器表达式是一种特殊的语法,用于在CMake构建系统中动态地生成构建规则。它们可以用于指定编译器选项、链接选项等。
本节先学习其中两种表达式:
$<condition:true string>
。如果 condition 为1,则此表达式结果为 true string
如果 condition 为0,则此表达式结果为空
$<COMPILE_LANGAND_ID:language, compiler_ids>
如果当前所用的语言与 language 一致且编译器ID在 compiler_ids 的列表中,则表达式值为1,否则为0
language 值主要为 cxx 和 c
compiler_ids 主要有GNU、Clang、MSVC等,有多个时用逗号隔开
命令:cmake --build . --target ged
【练习7】
step5
安装规则练习
install(TARGETS Tutorial DESTINATION bin)
cmake --install . // 安装到C:\Program Files (x86)\Tutorial\bin下
cmake --install . --prefix=\cmake\cmake-3.26.5-tutorial-source\Step5\install
cmake --install . --prefix=\Tools\Work\cmake\cmake-3.26.5-tutorial-source\Step5\install
自动测试
ctest -N //输出一个有几个测试
ctest -VV // 执行测试
【练习8】
step7
系统环境检测:主要是一些特有的函数检测,并不是系统环境的检测!!!
step8
自定义命令与输出文件
where g++
路径:\i686-7.3.0-release-posix-dwarf-rt_v5-rev0\mingw32\bin\g++.exe
路径:\mysys2\mingw64\bin\g++.exe
【练习9】
打包程序
windows需要安装NSIS软件, nullsoft installer
打开cmd.exe
>cpack --help
可以看到输出中有NSIS项:代表打包成.exe文件;
zip项: 打包成压缩包的格式zip,需要手动指定
先安装NSIS软件,之后使用下面的命令打包:
>cpack // 默认的打包命令,打包成.exe文件
>cpack -G ZIP // 打包成zip压缩包 不需要nsis软件
>cpack --config CPackSourceConfig.cmake // 打包源码 .tar.gz
【练习10】
编译并调用动态库程序
通用的clean方法
cmake --build . --target clean
【练习11】
【练习12】
05-12
2371
07-14
8760
02-27
3万+
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交