目录结构

1
2
3
4
5
6
{总项目目录}/
|-- {子项目目录}/
| |-- main.cpp
|-- {子项目目录}/
| |-- main.cpp
|-- CMakeLists.txt

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cmake_minimum_required(VERSION 3.29)
project({总项目名称})

# 设置C++20标准
set(CMAKE_CXX_STANDARD 20)

# 设置运行时库为MT(静态库)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# 设置MSVC编译器的utf-8输出
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

# 为每个项目创建可执行文件的函数
function(create_project_executable project_dir)
file(GLOB_RECURSE src_files ${project_dir}/*.cpp ${project_dir}/*.h)
get_filename_component(project_name ${project_dir} NAME)
add_executable(${project_name} ${src_files})
endfunction()

#遍历子目录并为每个子目录创建一个带有 main.cpp 文件的可执行文件
file(GLOB children RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/*)
foreach (child ${children})
if (IS_DIRECTORY ${CMAKE_SOURCE_DIR}/${child})
file(GLOB main_cpp_files ${CMAKE_SOURCE_DIR}/${child}/main.cpp)
if (main_cpp_files)
create_project_executable(${CMAKE_SOURCE_DIR}/${child})
endif ()
endif ()
endforeach ()