[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

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