You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake生成的Visual Studio解决方案中分组第三方依赖?

将第三方库统一分组到Visual Studio解决方案中

要让第三方库像CMakePredefinedTargets那样归到统一分组里,核心是利用CMake的**FOLDER目标属性**或全局CMAKE_FOLDER变量指定分组名称,以下是两种可行方案:

方法一:全局统一设置(最简单)

在添加所有第三方库的add_subdirectory之前,设置全局变量CMAKE_FOLDER为目标分组名(比如ThirdParty),后续通过该子目录生成的所有目标都会自动归到这个分组下。

修改你的主CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.24)
project(VoidEngine)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DEN_DEBUG")
ADD_DEFINITIONS(
    -std=c++17 # Or -std=c++0x
    # Other flags
)
include(C:/Users/user/vcpkg/scripts/buildsystems/vcpkg.cmake)
add_subdirectory(Game)
add_subdirectory(Engine)
add_subdirectory(Server)
add_subdirectory(HeadlessClient)

# ---------------- Third party modules -------------------
# 设置全局分组,后续子目录的目标默认归到ThirdParty组
set(CMAKE_FOLDER "ThirdParty")

add_subdirectory(ThirdParty/SDL2)
add_subdirectory(ThirdParty/zlib)

# ---- Steam Game Networking sockets definitions ------
add_definitions(-DBUILD_STATIC_LIB=1)
add_subdirectory(ThirdParty/GameNetworkingSockets)
remove_definitions(-DBUILD_STATIC_LIB=1)
# ------------------------------------------------------

add_subdirectory(ThirdParty/bgfx-cmake)

# 如果后续还有自定义项目目标需要添加,可重置CMAKE_FOLDER为空
# set(CMAKE_FOLDER "")

target_link_libraries (Game Engine SDL2-static bgfx)
target_link_libraries (HeadlessClient Engine SDL2-static bgfx protobuf GameNetworkingSockets_s)

方法二:针对单个目标精细设置(更灵活)

如果需要将不同第三方库分到嵌套子分组(比如ThirdParty/SDL2、ThirdParty/zlib),或者覆盖第三方库自身设置的FOLDER属性,可以手动给每个目标指定分组:

# 在添加第三方子目录之后,逐个设置目标分组
add_subdirectory(ThirdParty/SDL2)
set_target_properties(SDL2-static SDL2main PROPERTIES FOLDER "ThirdParty/SDL2")

add_subdirectory(ThirdParty/zlib)
set_target_properties(zlib zlibstatic PROPERTIES FOLDER "ThirdParty/zlib")

# 其他第三方库同理
add_subdirectory(ThirdParty/GameNetworkingSockets)
set_target_properties(GameNetworkingSockets_s PROPERTIES FOLDER "ThirdParty/GameNetworkingSockets")

补充说明

  • Visual Studio会自动识别CMake设置的FOLDER属性,将对应目标归类到指定分组,效果和CMakePredefinedTargets完全一致。
  • 若第三方库自身的CMakeLists已设置FOLDER属性,全局CMAKE_FOLDER会覆盖默认值,而手动设置的目标FOLDER优先级最高。

内容的提问来源于stack exchange,提问作者noob-cryptor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:43:21