tutorial_4/CMakeLists.txt
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )
# 声明一个 cmake 工程
project( HelloSLAM )
add_subdirectory(src)
tutorial_4/src/CMakeLists.txt
#工程添加多个特定的头文件搜索路径
include_directories(include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 共享库
add_library( tutorial_4 SHARED tutorial_4.cpp)
tutorial_4/src/tutorial_4.cpp
//这是一个库文件
#include <iostream>
using namespace std;
/**
* 代码作者:小秋SLAM实战教程
* 开发环境:Ubuntu 16.04
* 运行依赖:C++ 11
*/
void printHello()
{
std::cout<<"小秋SLAM实战教程"<<std::endl;
}
tutorial_4/src/tutorial_4.h
#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
// 上面的宏定义是为了防止重复引用这个头文件而引起的重定义错误
void printHello();
#endif
add_library( tutorial_4 SHARED tutorial_4.cpp )
“tutorial_4”是生成共享库的名字,“tutorial_4.cpp”是生成共享库的文件。
共享库的名字会默认加上前缀"lib"和"后缀.so"。
这个示例展示了如何使用 CMake 来构建一个共享库(动态库)。在此项目中,共享库是由 tutorial_4.cpp
源文件构建的,并将输出到项目目录下的 lib
子目录中。下面是详细的文件解释和构建过程:
项目的结构如下所示:
/tutorial_4
|-- CMakeLists.txt
|-- /src
|-- CMakeLists.txt
|-- tutorial_4.cpp
|-- tutorial_4.h
根目录的 CMakeLists.txt
位于 tutorial_4
的 CMakeLists.txt
文件负责整个项目的顶级配置。
cmake_minimum_required(VERSION 2.8)
project(HelloSLAM)
add_subdirectory(src)
这个文件设置了 CMake 的最低版本要求,定义了项目名称,并添加了 src
子目录到构建中。
src 目录的 CMakeLists.txt
位于 tutorial_4/src
的 CMakeLists.txt
文件用于配置源代码目录,并生成共享库。
include_directories(include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
add_library(tutorial_4 SHARED tutorial_4.cpp)
include_directories(include)
:包含头文件的目录。set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
:设置库文件的输出路径为项目根目录下的lib
文件夹。add_library(tutorial_4 SHARED tutorial_4.cpp)
:创建一个名为tutorial_4
的共享库(动态库),源文件为tutorial_4.cpp
。
tutorial_4.cpp 和 tutorial_4.h
tutorial_4.cpp
和 tutorial_4.h
定义了一个简单的函数 printHello
,该函数打印一条消息。
构建过程
-
创建一个构建目录:在项目根目录中创建一个新目录,例如
build
,用于存放构建文件。 -
运行 CMake:从
build
目录运行cmake ..
命令以生成 Makefile。 -
编译项目:在
build
目录中运行make
命令来编译项目。 -
检查生成的库:生成的共享库
libtutorial_4.so
将位于lib
目录中。
总结
这个示例展示了如何使用 CMake 创建一个共享库(动态库)。通过在 CMakeLists.txt
文件中指定库的类型和源文件,CMake 可以自动处理编译过程,生成共享库文件。共享库适用于那些需要动态加载或节省内存空间的应用场景。这种方法对于管理大型项目中的库非常有用,因为它提供了清晰和灵活的方式来组织代码。