如何使用CMake来解析一个大工程里的cpp、hpp、h等文件?

如何使用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
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值