老样子,同样的,还是为了记录自己的学习过程,鄙人以前做深度学习的,主要使用Python,最近由于工作需要使用C++各种库,所以记录一下自己使用Cmake编译代码的过程。

.
|—— CMakeLists.txt
|—— example // 存放例子代码
|── include // 存放 比如宏,结构定义,函数定义,类型定义
|—— *.h
|—— lib // 存放编译时产生的链接库
|── src // 存放源文件
|── CMakeLists.txt
└── *.cpp
|—— main.cpp
.
cmake编译的文件结构一般相对固定,大家可以模仿,创建自己的文件结构,简单解释一下:
src文件夹,一般存放*.cpp文件类型。lib文件夹,一般存放编译过程中产生的动态链接库。include文件夹,一般存放*.h文件。example文件夹,一般存放演示代码。cmake_minimum_required(VERSION 3.23)
project(visualizeGeometry)
set(CMAKE_CXX_STANDARD 14)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
add_executable(visualizeGeometry main.cpp)
find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS}) // 头文件在该路径下
target_link_libraries(visualizeGeometry ${Pangolin_LIBREARIES})
cmake_minimum_required(VERSION 3.23):最低版本需要,根据自己安装的版本来,必须有的。
set(CMAKE_CXX_STANDARD 14):使用的C++标准,可以不用设置。
project(visualizeGeometry):项目名称。
add_executable(visualizeGeometry main.cpp):文件执行输出。
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib):设置库文件输出到代码源路径下的lib文件夹中。
find_package(Pangolin REQUIRED):找Pangolin的库,REQUIRED表示必须用到该库,没有就报错。
include_directories(${Pangolin_INCLUDE_DIRS}):将找到的库路径传到当前文件路径里面。
target_link_libraries(visualizeGeometry ${Pangolin_LIBREARIES}):连接这个库到目标文件取,find_package, include_directories,target_link_libraries 这三个一般配套使用。
add_library:源文件打包成动态库和静态库,第一个参数就是生成库的名字,第二个参数是生成库的类型。