如何使用CMake来解析一个大工程里的cpp、hpp、h等文件?
https://zhuanlan.zhihu.com/p/441155027
cmake_minimum_required(VERSION 3.8) # 指定 CMake 版本号
project(D3D) # 项目名称为 D3D
option(GROUP_BY_EXPLORER ON) # 启用保留文件结构和资源管理器一样
set(CMAKE_CXX_STANDARD 20) # 设置C++版本 20
# 递归查找文件夹下的 .h .hpp. ini 文件保存到 HEADER_FILES
file(GLOB_RECURSE HEADER_FILES *.h *.hpp *.ini)
# 递归查找文件夹下的 *.cpp *.c 文件保存到 SOURCE_FILES
file(GLOB_RECURSE SOURCE_FILES *.cpp *.c)
# 递归查找文件夹下的 *.hlsl 文件保存到 SHADER_FILES(如果没有 shader 可以删除)
file(GLOB_RECURSE SHADER_FILES *.hlsl)
# 将 HEDADER_FILES 和 SOURCE_FILES 和 SHADER_FILES 保存到 AllFile 变量
set(AllFile ${HEADER_FILES} ${SOURCE_FILES} ${SHADER_FILES})
# 对 AllFile 变量里面的所有文件分类(保留资源管理器的目录结构)
foreach(fileItem ${AllFile})
# Get the directory of the source file
get_filename_component(PARENT_DIR "${fileItem}" DIRECTORY)
# Remove common directory prefix to make the group
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" GROUP "${PARENT_DIR}")
# Make sure we are using windows slashes
string(REPLACE "/" "\\" GROUP "${GROUP}")
# Group into "Source Files" and "Header Files"
set(GROUP "${GROUP}")
source_group("${GROUP}" FILES "${fileItem}")
endforeach()
# 将 AllFile 里面的所有文件编译为 D3D 静态库
add_library(D3D STATIC ${AllFile})
# 启用VS项目文件夹分类
option(USE_SOLUTION_FOLDERS ON)
# 设置 D3D 为 Component 文件夹下
set_target_properties(D3D PROPERTIES FOLDER "Component")
# 设置 hlsl 为 shader 资源文件
set_property(SOURCE ${SHADER_FILES} PROPERTY VS_TOOL_OVERRIDE "shader")
# 头文件目录
target_include_directories(D3D PUBLIC
${PROJECT_COMPONENT_DIR}
)
# 链接库目录(如果有才需要)
# target_link_directories(D3D PUBLIC
# ...
# )
# 链接库
target_link_libraries(D3D PUBLIC
GameTimer
Exception
)