如何在VSCode中通过CMake配置多架构、多工具链的不同编译目标?
在单个VSCode工作区实现多平台CMake构建方案
完全可以在单个VSCode工作区搞定多工具链、多目标的CMake构建,核心是利用CMake官方的Presets机制,配合VSCode的CMake Tools扩展实现快速切换,具体步骤如下:
1. 用CMake Presets统一管理所有平台配置
在项目根目录创建CMakePresets.json文件,把三个平台的工具链、构建目录、编译参数都定义进去,这是最规范的多配置管理方式:
{ "version": 3, "configurePresets": [ { "name": "platform1", "binaryDir": "${sourceDir}/build/platform1", "toolchainFile": "${sourceDir}/platform1.cmake", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } }, { "name": "platform2_native", "binaryDir": "${sourceDir}/build/platform2_native", "toolchainFile": "${sourceDir}/platform2.cmake", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } }, { "name": "platform2_emulated", "binaryDir": "${sourceDir}/build/platform2_emulated", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } } ], "buildPresets": [ { "name": "platform1", "configurePreset": "platform1" }, { "name": "platform2_native", "configurePreset": "platform2_native" }, { "name": "platform2_emulated", "configurePreset": "platform2_emulated" } ] }
2. 适配不同子目录的CMakeLists.txt
你的项目里Platform1和Platform2各有独立的CMakeLists.txt,可以在根目录加一个顶层CMakeLists.txt,根据当前加载的预设自动引入对应子目录:
cmake_minimum_required(VERSION 3.20) project(MultiPlatformBuild) # 根据预设名称判断要构建的平台 if(CMAKE_CURRENT_LIST_DIR STREQUAL "${CMAKE_SOURCE_DIR}/platform1") add_subdirectory(platform1) else() add_subdirectory(platform2) endif()
或者更直接的方式:在每个预设的configurePresets里添加sourceDir字段,指定对应子目录的路径,比如给platform1的预设加"sourceDir": "${sourceDir}/platform1",这样配置时直接加载该子目录的CMakeLists。
3. 在VSCode里快速切换构建目标
配置好Presets后,操作就很简单了:
- 打开命令面板(Ctrl+Shift+P),输入
CMake: Select Configure Preset,选对应的平台完成首次配置 - 之后直接点击VSCode底部状态栏的「CMake Preset」或「Build Preset」,就能快速切换要构建的目标,点击构建按钮即可完成编译
每个平台的构建产物会存放在各自的build/xxx目录下,不会互相干扰,完全满足你在单个工作区处理多平台编译的需求。
内容的提问来源于stack exchange,提问作者Bri Bri
相关产品推荐
相关产品推荐

