CMake降低耦合
AI-摘要
Tianli GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
CMake降低耦合
幻雪前言
这节课中的依赖是狭义的认为不需要提供的库不链接,换一句话说只有当前库中有调用另一个库的函数那么构成依赖。
预览
做法是将源代码文件(在这个案例中是 .cpp
文件,对于 C 项目将是 .c
文件)编译并打包成库文件。然后添加访问权级,让库可以被其他部分的项目代码链接和使用。
Cmake 权级如下:
范围 | 目标构建时 | 链接目标时 | 描述 |
---|---|---|---|
PRIVATE | 是 | 否 | 目标私有,库或路径仅用于构建当前目标,在当前目标的外部不可见。 |
INTERFACE | 否 | 是 | 目标接口,用于目标接口的库或路径不直接用于构建目标,但会传递给链接此目标的其他目标。 |
PUBLIC | 是 | 是 | 两者兼而有之,库或路径用于构建当前目标,且会传递给任何链接了该目标的其他目标。 |
课程文件
以下是(比飞鸟贵重的多_HKL)up 教程里的各个文件代码add.hh
1 | #pragma once |
add.cpp
1 |
|
calculator.h
1 | class Calculator |
calculator.cpp
1 |
|
common.h
1 | #pragma once |
common.cpp
1 |
|
sub.h
1 | #pragma once |
sub.cpp
1 |
|
文件关系处理
我们希望的是每一个库只取自己需要的部分来减轻依赖,而不是
这就要求我们对 cmakelists 进行配置
这是 add 的 CMakelists.txt
配置+解释
1 | # add_library(add STATIC add.cpp) |
一共三句话,构建库,指出依赖对象和权级,提供头文件路径。
依次配置四个文件的 CMakelists.txt
即可减小依赖。
后续
main.cpp
的同级下配置以下,以提供 cmake 路径
1 | # add_subdirectory(common) |
构建可执行文件
1 | # add_executable(lesson3_1 main.cpp) |
Q 1:
为什么 main 函数不需要构建静态库
A 1:
由于 main
函数是程序的起始点,它不是用于被其他函数或程序调用的,并不需要作为库中的一部分。库(无论是静态的还是动态的)是一组代码,其目的在于提供给其他程序调用,以实现代码复用或分离等目的。一个静态库或动态库包含了可以被各种不同程序重用的函数和数据。
最后顶级 CMakelists.txt
加上即可
1 | add_subdirectory(lesson3_1)#去寻找cmake文件 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果