[toc] https://www.bilibili.com/video/BV1V84y117YU/?spm_id_from=333.999.0.0&vd_source=1140bfac569fe6b7e83c9f1282924d06
# 项目目录组织方式
- 如上图,头文件目录下再套一层目录,为了防止头文件命名冲突 (比如都有一个叫 stdio.h 的文件,套一层以后就变成了 模块 /stdio.h)
# 项目的分离
比如
在这里被划分成了两个子项目,这样就可以保证项目的可复用性 比如在 python 中,python.exe 只有 16kb, 而实际上用于执行 python 语言的库在 libpython.so 中,python.exe 只是用来调用.so 的一个外部工具
正因为 python 将本体拆分成了一个库,所以 Blender 才可以直接使用 Python 语言,而不需要借助 Python.exe
# 命令释义
# add_subdirectory
# glob 和 glob_recruse
# 只有头文件,没有源文件
比如上面的头文件里实际上只有一个函数,这个时候需要加上 static 或者 inline 防止链接发生同名冲突 类本身就有 inline 属性,所以不需要在头文件里加上
# 前向引用
前向引用只需要在头文件里声明对应的类,而不需要引用目标头文件 (因为实际上指针都是一个 8 字节的类型,编译器只需要知道这个类型是一个类就可以了)。 好处是:加快编译速度,防止循环引用 (头文件之间的循环引用) 但是如果需要使用到类中的实现,就必须导入头文件
# 以项目名为 namespace, 防止符号冲突
全局的类自动带有 inline 属性,而 inline 属性又有 weak
的特性(即会随机选择一个进行覆盖)
# cmake 也可以 include
cmake 也可以使用 inlcude (另一个 cmake) 来将目标 cmake 的内容粘贴到对应位置
# 第三方库 / 依赖配置项
find_package
# 位置查找
Unix 一般都会放在 usr 目录下 以 Windows 引用 QT5 举例
# 设置库的输出位置
# 古代 find 和现代 find
古代 find 使用 target_include_directories, 后面加一大堆的花括号之类的 现代直接用 find_package 标记即可 cmake 即支持古代也支持现代的
# 扩展
# 语义版本号 (semantic versioning)
… 主版本号 (功能巨大变更), 次版本号 (功能修改), 补丁版本号 (功能没有变,只是修复了一些 BUG)
# 参考
https://www.bilibili.com/video/BV1V84y117YU/?spm_id_from=333.999.0.0&vd_source=1140bfac569fe6b7e83c9f1282924d06