提交 bfd744b3 编写于 作者: fun binary's avatar fun binary

111

上级 569ad6b7
# 开始
```cmake
# 指定CMake最低版本
cmake_minimum_required(VERSION 3.10)
# 设置项目名称
project(hello)
# 添加可执行程序
add_executable(hello hello.cpp)
```
CMake 支持大写、小写和大小写混合命令。
```C++
//hello.cpp
#include <iostream>
using namespace std;
int main() {
cout << "hello cmake!!!" << std::endl;
}
```
### cmake_minimum_required
```cmake
cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])
```
1. 3.12版本新增`<max>`
2. 功能:设置项目所需最低的cmake版本
3. 此命令将设置变量`CMAKE_MINIMUM_REQUIRED_VERSION`
### project
```cmake
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project-description-string>]
[HOMEPAGE_URL <url-string>]
[LANGUAGES <language-name>...])
```
1. 设置项目名称,并将其存储在变量中 `PROJECT_NAME`
2. 从顶层调用 `CMakeLists.txt`时还会将项目名称存储在变量中`CMAKE_PROJECT_NAME`
3. 并且设置变量 `PROJECT_SOURCE_DIR`,` <PROJECT-NAME>_SOURCE_DIR`,` PROJECT_BINARY_DIR`,` <PROJECT-NAME>_BINARY_DIR`
**VERSION**
1. 接受一个非负整数组成的参数
2. 设置变量:
- `PROJECT_VERSION`,` <PROJECT-NAME>_VERSION`
- `PROJECT_VERSION_MAJOR`,` <PROJECT-NAME>_VERSION_MAJOR`
- `PROJECT_VERSION_MINOR`, `<PROJECT-NAME>_VERSION_MINOR`
- `PROJECT_VERSION_PATCH`, `<PROJECT-NAME>_VERSION_PATCH`
- `PROJECT_VERSION_TWEAK`, `<PROJECT-NAME>_VERSION_TWEAK`
- 3.12版本新增存储变量 `CMAKE_PROJECT_VERSION`
**DESCRIPTION**
1. 建议这个描述是一个比较短的字符串,一般不超过几个字。
2. 设置变量:
- `CMAKE_PROJECT_DESCRIPTION`
- `PROJECT_DESCRIPTION``<PROJECT-NAME> _DESCRIPTION`
**HOMEPAGE_URL**
1. 项目规范页的URL
2. 设置变量:
- `PROJECT_HOMEPAGE_URL``<PROJECT-NAME>_HOMEPAGE_URL`
- `CMAKE_HOMEPAGE_URL`
**LANGUAGES**
1. 指定项目编程语言
2. 支持C、CXX(即C++)、CUDA、OBJC(即Object-C)OBJCXX、FORTRAN、ISPC和ASM。默认情况下C和CXX。
**代码注入**
1. 3.15版本增加`CMAKE_PROJECT_INCLUDE` and `CMAKE_PROJECT_INCLUDE_BEFORE`
2. 3.17版本增加`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`
### add_executable
```cmake
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
```
1. name:可执行目标文件的名字,在一个cmake工程中,这个名字必须全局唯一。
2. WIN32:用于`windows系统`下创建一个以`WinMain`为入口的可执行目标文件(通常入口函数为`main`),它不是一个`控制台应用程序`,而是一个`GUI应用程序`。当`WIN32`选项使用的时候,可执行目标的 `WIN32_EXECUTABLE`会被置位`ON`
3. MACOSX_BUNDLE:用于`mac系统`或者`IOS系统`下创建一个GUI可执行应用程序,当`MACOSX_BUNDLE`选项使用的时候,可执行目标的`MACOSX_BUNDLE`会被置位`ON`
4. EXCLUDE_FROM_ALL:用于指定可执行目标是否会被构建,当该选项使用的时候,可执行目标不会被构建。
5. [source1] [source2 ...]:构建可执行目标文件所需要的源文件。也可以通过`target_sources()`继续为可执行目标文件添加源文件,要求是在调用`target_sources`之前,可执行目标文件必须已经通过`add_executable``add_library`定义了。
# 添加版本号和配置的文件
CMakeLists.txt
```cmake
cmake_minimum_required(VERSION 3.10)
project(Hello)
# 设置版本变量
set(Hello_VERSION_MAJOR 1)
set(Hello_VERSION_MINOR 0)
# 拷贝,并生成配置文件
configure_file(HelloConfig.h.in HelloConfig.h)
add_executable(hello hello.cpp)
# include文件目录
target_include_directories(hello PUBLIC
"${PROJECT_BINARY_DIR}"
)
```
HelloConfig.h.in
```C++
#define Hello_VERSION_MAJOR @Hello_VERSION_MAJOR@//注意@中间不能有空格,使用vscode自动保存会自动加空格
#define Hello_VERSION_MAJOR @Hello_VERSION_MAJOR@
```
hello.h
```C++
#include <HelloConfig.h>
#include <iostream>
using namespace std;
int main() {
cout << "hello cmake!!!" << std::endl;
std::cout << Hello_VERSION_MAJOR << std::endl;
}
```
### configure_file
### target_include_directories
......@@ -130,7 +130,7 @@
```
# 如果下载不了可以直接先去官网https://golang.org/dl/下,然后再上传到服务器
[goiam@ ~]$ wget https://dl.google.com/go/go1.16.4.linux-amd64.tar.gz -O /tmp/go1.16.4.linux-amd64.tar.gz
[goiam@ ~]$ wget https://dl.google.com/go/go1.16.5.linux-amd64.tar.gz -O /tmp/go1.16.4.linux-amd64.tar.gz
```
2. 解压和安装
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册