在CMake中创建一个动态库(或共享库)并将多个目录中的源文件编译进这个库是一个常见需求。下面是如何实现这一目标的步骤:
-
创建CMakeLists.txt文件
在项目的根目录下创建一个CMakeLists.txt文件。这个文件将包含指导CMake如何构建项目的指令。 -
指定CMake的最小版本和项目名称
cmake
Copy code
cmake_minimum_required(VERSION 3.0)
project(MyLibrary)
这里,cmake_minimum_required指定了该项目需要的CMake的最小版本。project命令定义了项目的名称。 -
收集源文件
接下来,你需要收集所有需要编译进动态库的源文件。如果源文件分散在多个目录中,你可以使用file(GLOB …)命令来收集这些文件。例如,如果你的源文件分布在src和include目录下,可以这样做:
cmake
Copy code
file(GLOB SOURCES
“src/.cpp"
"include/.cpp”
)
这会将src和include目录下所有的.cpp文件添加到SOURCES变量中。
- 创建动态库
使用add_library命令根据收集到的源文件创建动态库:
cmake
Copy code
add_library(MyLibrary SHARED
S
O
U
R
C
E
S
)
这里,
M
y
L
i
b
r
a
r
y
是动态库的名称,
S
H
A
R
E
D
关键字指示
C
M
a
k
e
这将是一个共享库,
{SOURCES}) 这里,MyLibrary是动态库的名称,SHARED关键字指示CMake这将是一个共享库,
SOURCES)这里,MyLibrary是动态库的名称,SHARED关键字指示CMake这将是一个共享库,{SOURCES}变量包含了所有的源文件。
- 指定包含目录(可选)
如果你的头文件不在源文件的同一目录下,你可能需要使用target_include_directories命令来指定头文件的位置。例如,如果头文件位于include目录下:
cmake
Copy code
target_include_directories(MyLibrary PUBLIC include)
这样,编译器就能找到所有的头文件了。
- 构建项目
在项目的根目录下,打开终端或命令提示符,执行以下命令来生成构建系统并构建项目:
bash
Copy code
cmake -S . -B build
cmake --build build
这会在一个名为build的目录中创建项目的构建系统,并编译生成动态库。
这个简单的例子演示了如何在CMake中从多个目录中的源文件创建一个动态库。根据项目的实际需求,CMakeLists.txt文件可能需要包含更多的配置指令,例如设置编译选项、链接库或处理平台特定的需求。