Skip to content

Commit dfefdda

Browse files
committed
fix(cmake): fix wrong use
1 parent a9e9d79 commit dfefdda

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

docs/tools/intro-cmake.md

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# CMake 入门
22
> [!note]
3-
> 学习这一篇的内容,需要你对以下技能有基本的了解:
3+
> 学习本文内容,需要你对以下技能有基本的了解:
44
> * Make 入门(请参考[这篇文档](./intro-make.md)
55
>
66
> 更重要的是,用过 Make 后,你更能体会到 CMake 带来的便利。
@@ -29,7 +29,7 @@ brew install cmake
2929

3030
下面打开终端,键入:
3131

32-
```plain
32+
```bash
3333
$ cmake --version
3434
cmake version 4.0.1
3535

@@ -115,17 +115,12 @@ cmake -B build -DCMAKE_BUILD_TYPE=Release
115115

116116
CMake 通过一个名为 `CMakeLists.txt` 的文件定义构建规则。常见语法如下:
117117

118-
### 定义项目/约束CXX标准
118+
### 定义项目
119119

120120
```cmake
121121
# 规定 CMake 最低版本要求
122122
cmake_minimum_required(VERSION 3.15)
123123
124-
# 规定 C++ 最低标准
125-
set(CMAKE_CXX_STANDARD 17)
126-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
127-
set(CMAKE_CXX_EXTENSIONS OFF)
128-
129124
# 定义项目
130125
project(prj LANGUAGES C CXX)
131126
```
@@ -170,8 +165,9 @@ CMake 提供了很多方便的命令管理 target 的属性,这里的 target
170165
target_sources(myapp PUBLIC hello.cpp other.cpp) # 添加源文件
171166
target_include_directories(myapp PUBLIC include) # 添加头文件搜索目录
172167
target_link_libraries(myapp PUBLIC hellolib) # 添加链接库
173-
target_add_definitions(myapp PUBLIC -DMY_MACRO=1) # 添加宏定义 MY_MACRO=1
168+
target_compile_definitions(myapp PUBLIC MY_MACRO=1) # 添加宏定义 MY_MACRO=1
174169
target_compile_options(myapp PUBLIC -fopenmp) # 添加编译选项
170+
target_compile_features(mylib PUBLIC cxx_std_17) # 为指定目标启用编译器特性
175171
```
176172

177173
这些命令只对指定的 target 生效,而不会影响全局。
@@ -202,10 +198,9 @@ add_compile_options(-fopenmp) # 添加编译选项
202198
cmake_minimum_required(VERSION 3.15)
203199
project(prj)
204200
205-
set(CMAKE_CXX_STANDARD 17)
206-
207201
add_executable(prj main.cpp)
208202
target_include_directories(prj PUBLIC include)
203+
target_compile_features(prj PUBLIC cxx_std_17)
209204
```
210205

211206
但是直接引入头文件,函数实现在头文件里,没有提前编译,每次需要重复编译同样的内容,编译时间长。
@@ -224,12 +219,11 @@ target_include_directories(prj PUBLIC include)
224219
cmake_minimum_required(VERSION 3.15)
225220
project(prj)
226221
227-
set(CMAKE_CXX_STANDARD 17)
228-
229222
add_subdirectory(fmt)
230223
231224
add_executable(prj main.cpp)
232225
target_link_libraries(prj fmt::fmt)
226+
target_compile_features(prj PUBLIC cxx_std_17)
233227
```
234228

235229
### 引用系统中安装的第三方库 `find_package`
@@ -254,12 +248,11 @@ sudo apt install libfmt-dev
254248
cmake_minimum_required(VERSION 3.15)
255249
project(prj)
256250
257-
set(CMAKE_CXX_STANDARD 17)
258-
259-
find_package(fmt)
251+
find_package(fmt REQUIRED)
260252
261253
add_executable(prj main.cpp)
262254
target_link_libraries(prj fmt::fmt)
255+
target_compile_features(prj PUBLIC cxx_std_17)
263256
```
264257

265258
在CMake中,一个项目可以包含多个库。CMake允许一个包(package)提供多个库,这些库也被称为组件(components)。因此,在使用 `target_link_libraries` 指令链接库时,应采用 `包名::组件名` 的格式。

0 commit comments

Comments
 (0)