1. 引言
2. 基础知识
写一段c++代码,怎么才能跑起来呢?
简单来说,需要在开发机上编译生成可执行文件,然后将可执行文件(bin)和相关依赖(lib,动静态链接库)拷贝到开发板上,执行“可执行文件”即可。
补充解释一下动静态链接库:
静态(函数)库 扩展名为(.a或.lib,.a是linux侧,.lib是windows侧),静态库在编译时,会直接整合到目标程序中,编译出来的文件会比较大。
优点:编译出的可执行文件 可以独立运行,不再需要向外部要求读取函数库的内容。
缺点:从升级难易度来看没有优势,如果函数库更新,需要重新编译。
动态(函数)库 扩展名为(.so或.dll,.so是linux侧,.dll是windows侧),动态库在编译时,在程序里只有一个“指向”的位置,也就是说,当可执行文件需要使用到 函数库 中的内容时,程序才会去读取 函数库 来使用。
优点:方便产品功能升级,只要替换对应动态库即可,不必重新编译整个可执行文件。
缺点:可执行文件无法单独运行。
在构建稍微规范/复杂点的C++项目时,通常会用到CmakeList,下面来看一下。
2.1 代码结构
构建一个简单但典型的case来说明一个C++项目的调用运行逻辑,项目结构如下:
在 CMake 项目中,通常会有 顶层 CMakeLists.txt,以及src子目录中的 嵌套CMakeLists.txt,它们共同组织代码的编译流程。CMake 使用 层次化调用,即 顶层 CMakeLists.txt 调用子目录 CMakeLists.txt。编译过程如下:
src/CMakeLists.txt: 添加 main.cpp 和 main.h、包含子模块
module/CMakeLists.txt: 定义 module.cpp、生成库文件
2.2 CmakeList
最外层CmakeLists.txt
src/CMakeLists.txt
src/module/CMakeLists.txt
2.3 Main
main.cpp
main.h
2.4 module
module.cpp
module.h
2.5 编译与执行
输出:
3. VP示例中Cmakelists
3.1 vp/code/07_single_rotate/CMakelists.txt
在vp/code/07_single_rotate目录下的CMakelists.txt,解读如下:
DEPS_SOURCE_DIR在哪设置的?(3.2节中设置)
RELEASE_BIN_DIR在哪设置的?(3.2节中设置)
带着这2个疑问,我们往外看一层CmakeLists.txt。
3.2 vp/code/CMakelists.txt
PROJECT_SOURCE_DIR在哪设置的?
答:PROJECT_SOURCE_DIR 是指向项目源代码根目录的 CMake 预定义变量,常用于构建路径、引用资源文件等,帮助 CMake 找到项目中的文件。
build_type在哪设置的?
4. 总结
本文主要介绍在VP 单算子示例中用到的CmakeLists.txt应该怎么写,主要适用于和我一样C++基础学习用户~



