add_subdirectory()
是 CMake 构建系统中的一个命令,用于将子目录添加到构建过程中
以下是 add_subdirectory()
函数的基本用法:
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
source_dir
:子目录的路径,相对于当前CMakeLists.txt
文件的位置。binary_dir
(可选):指定子目录的构建输出目录。如果省略此参数,则将使用默认的构建目录。EXCLUDE_FROM_ALL
(可选):如果指定此选项,则子目录中的目标将不会自动包含在主项目的默认构建过程中。你需要显式地指定依赖关系。
以下是一个简单的示例,说明如何使用 add_subdirectory()
:
假设你有以下目录结构:
my_project/ CMakeLists.txt main.cpp lib1/ CMakeLists.txt lib1.cpp lib1.h lib2/ CMakeLists.txt lib2.cpp lib2.h
在这个例子中,my_project
包含两个子目录 lib1
和 lib2
,每个子目录都有自己的 CMakeLists.txt
文件。
顶层 CMakeLists.txt
文件内容如下:
cmake_minimum_required(VERSION 3.0) project(my_project) add_subdirectory(lib1) add_subdirectory(lib2) add_executable(my_project main.cpp) target_link_libraries(my_project PRIVATE lib1 lib2)
在这个例子中,我们首先调用 add_subdirectory()
函数,将 lib1
和 lib2
子目录添加到构建过程中。然后,我们创建一个名为 my_project
的可执行文件,并将其链接到 lib1
和 lib2
库。
lib1
和 lib2
的 CMakeLists.txt
文件分别如下:
lib1/CMakeLists.txt
:
add_library(lib1 STATIC lib1.cpp)
lib2/CMakeLists.txt
:
add_library(lib2 STATIC lib2.cpp)
在这些子目录的 CMakeLists.txt
文件中,我们分别为 lib1
和 lib2
创建静态库。这样,当我们构建 my_project
时,它将自动构建这两个库,并将它们链接到可执行文件中。