CMake-1
CMake介绍
CMake简介
cmake是一个高级编译配置工具。
当多个人用不同语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等),这时候就需要CMake。所有操作都是通过编译CMakeLists.txt来完成的。
最新版本的CMake应当去官网学习CMake Tutorial
HelloWorld
编写HelloWorld程序
1
2
3
4
5
6
7#main.cpp
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
}
配置CMakeLists.txt
1
2
3
4
5
6
7#CMakeLists.txt
PROJECT (HELLO)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})使用cmake,生成makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16❯ cmake ./
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- This is BINARY dir/root/codes/cpp
-- This is SOURCE dir/root/codes/cpp
-- Configuring done
-- Generating done
-- Build files have been written to: /root/codes/cpp使用make命令编译makefile
1
2
3
4
5❯ make
Scanning dependencies of target hello
[100%] Building CXX object CMakeFiles/hello.dir/hello.cpp.o
Linking CXX executable hello
[100%] Built target hello
CMake语法
关键字
PROJECT
可以用来指定工程的名字和支持的语言,默认支持所有语言
1 |
|
该指令隐式的定义了两个CMake变量
- _BINARY_DIR: 本例中是HELLO_BINARY_DIR
- _SOURCE_DIR: 本例中是HELLO_SOURCE_DIR
MESSAGE关键字就可以直接使⽤者两个变量,当前都指向当前的⼯作⽬录
SET
用来显式地指定变量
1 |
|
MESSAGE
像终端输出用户信息
主要包含三种信息
- SEND_ERROR,产生错误,生成过程被跳过
- SATUS,输出前缀为"-"的消息
- FATAL_ERROR,立即终止所有cmake进程
ADD_EXECUTABLE
生成可执行文件
1 |
|
语法的基本规则
- 变量使用 '${}'取值,但在IF控制语句中直接使用变量名
- 指令(参数1 参数2 ......)
- 指令大小写无关,腿甲全部使用大写指令
内部构建和外部构建
- 内部构件会在源文件目录下生成较多的临时文件
- 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响
外部构建示例
1 |
|
工程化
- src:工程源代码
- doc:工程的文档
- 添加COPYRIGHT,README
- 添加runhello.sh脚本
- 将构建后的目标文件放入目录的bin子目录
- 将doc目录的内容以及COPYRIGHT/README安装到/usr/share/doc/cmake
1 |
|
外层CMakeLists.txt
1 |
|
src目录下CMakeLists.txt
1 |
|
ADD_SUBDIRECTORY
1 |
|
用于指向当前工程添加存放源文件的子目录,并可以指定之间二进制文件和目标二进制文件存放位置
[EXCLUDE_FROM_ALL],排除目录下文件不进行编译
ADD_SUBDIRECTORY(src bin)
将 src ⼦⽬录加⼊⼯程并指定编译输出(包含编译中间结果)路径为bin ⽬录 如果不进⾏ bin ⽬录的指定,那么编译结果(包括中间结果)都将存放在build/src ⽬录
更改二进制的保存路径
SET指令重新定义EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH变量,来指定最终的目标二进制文件的位置
CMake-1
https://www.spacezxy.top/2022/02/27/CMake/CMake-1/