如何在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
相关产品推荐
相关产品推荐

