cmake_minimum_required(VERSION 2.8.4)
project(tutorial_3)
add_subdirectory(src)
include_directories(include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
add_library( tutorial_3 STATIC hello.cpp)
#include "hello.h"
void hello_func(void) {
std::cout<<"小秋SLAM代码实战笔记"<<std::endl;
return;
}
#ifndef HELLO_H_
#define HELLO_H_ (1)
#include <iostream>
void hello_func(void);
#endif
add_library(<name> [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL]source1 [source2 ...])
<name>生成库的名字,直接写名字不加`lib`,会自动加上前缀。
SHARED动态库
STATIC静态库
ADD_LIBRARY(hello SHARED hello.c)
ADD_LIBRARY(hello STATIC hello.c)
add_library( hello hello.cpp)
“hello”是生成静态库的名字,“Hello.cpp”是生成静态库的源文件。
静态库的名字会默认加上前缀"lib"和"后缀.a",静态库/动态库只是后缀名不同而已
这个示例展示了如何使用 CMake 生成一个静态库。在这个项目中,静态库由 hello.cpp
源文件构建,并且将输出到项目目录下的 lib
子目录中。以下是详细的文件解释和构建过程:
项目的结构如下所示:
/tutorial_3
|-- CMakeLists.txt
|-- /src
|-- CMakeLists.txt
|-- hello.cpp
|-- hello.h
位于 tutorial_3
的 CMakeLists.txt
文件负责整个项目的顶级配置。
cmake_minimum_required(VERSION 2.8.4)
project(tutorial_3)
add_subdirectory(src)
这个文件设置了 CMake 的最低版本要求,定义了项目名称,并且添加了 src
子目录到构建中。
位于 tutorial_3/src
的 CMakeLists.txt
文件用于配置源代码目录,并生成静态库。
include_directories(include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
add_library(tutorial_3 STATIC hello.cpp)
include_directories(include)
:包含头文件的目录。这里没有明确的 include
子目录,所以这行可能不是必需的。set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
:设置库文件的输出路径为项目根目录下的 lib
文件夹。add_library(tutorial_3 STATIC hello.cpp)
:创建一个名为 tutorial_3
的静态库,源文件为 hello.cpp
。hello.cpp
和 hello.h
定义了一个简单的函数 hello_func
,该函数打印一条消息。
创建一个构建目录:在项目根目录中创建一个新目录,例如 build
,用于存放构建文件。
运行 CMake:从 build
目录运行 cmake ..
命令以生成 Makefile。
编译项目:在 build
目录中运行 make
命令来编译项目。
检查生成的库:生成的静态库 libtutorial_3.a
将位于 lib
目录中。
这个示例展示了如何使用 CMake 创建一个静态库。通过在 CMakeLists.txt
文件中指定库的类型和源文件,CMake 可以自动处理编译过程,生成静态库文件。这种方法对于管理大型项目中的库非常有用,因为它提供了清晰和灵活的方式来组织代码。