网站建设中请稍后再访问wordpress 京东主题
网站建设中请稍后再访问,wordpress 京东主题,手机网站用什么空间,郓城县网站建设1.背景 环境#xff1a;windows10 VS2022 项目#xff1a;cmake项目 包管理器#xff1a;vcpkg 此前通过VS2022使用cmake项目都正常#xff0c;包括设置cmake工具链文件为vcpkg#xff0c;但是昨天使用VS2022配置cmake报错#xff0c;find_package freetype库时找不到
…1.背景环境windows10 VS2022项目cmake项目包管理器vcpkg此前通过VS2022使用cmake项目都正常包括设置cmake工具链文件为vcpkg但是昨天使用VS2022配置cmake报错find_package freetype库时找不到#freetype find_package(Freetype REQUIRED) target_link_libraries(main PRIVATE Freetype::Freetype) # since CMake 3.10已经通过vcpkg在本地安装了freetype并且设置了环境变量VCPKG_ROOT然后调试cmakelists.txt发现CMAKE_TOOLCHAIN_FILE变量值是VS2022安装目录下子目录中的vcpkg.cmakeD:\Program Files\Microsoft Visual Studio\2022\Professional\VC\vcpkg\scripts\buildsystems\vcpkg.cmake这就不对了我本地自己的vcpkg安装位置是其它位置包括通过vcpkg安装的包。2.方法论首先有几种方法可以设置cmake工具链文件方法一使用 Visual Studio 的 CMake 配置文件Visual Studio 2019 16.10 推荐使用CMakePresets.json来管理默认配置。打开项目根目录创建或编辑CMakePresets.json。在configurePresets中添加{ version: 3, configurePresets: [ { name: x64-debug, hidden: false, generator: Ninja, description: Debug build with vcpkg toolchain, binaryDir: ${sourceDir}/out/build/${presetName}, cacheVariables: { CMAKE_TOOLCHAIN_FILE: D:/vcpkg/scripts/buildsystems/vcpkg.cmake } } ] }方法二使用 CMakeSettings.json如果项目还在用旧的CMakeSettings.json在 Visual Studio 中选择配置 → 管理配置。在编辑器中找到CMake 工具链文件填入路径。{ configurations: [{ name: x64-Debug, generator: Visual Studio 15 2017, configurationType : Debug, buildRoot: ${env.LOCALAPPDATA}\\CMakeBuild\\${workspaceHash}\\build\\${name}, cmakeCommandArgs: , buildCommandArgs: -m -v:minimal, variables: [{ name: CMAKE_TOOLCHAIN_FILE, value: D:\\src\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake }] }] }注意新版VS推荐使用CMakePresets.json来管理默认设置可以在VS的工具》选项中查看和配置方法三在 CMakeLists.txt 中设置如果你想在项目脚本中直接指定cmake_minimum_required(VERSION 3.20) # 必须在 project() 之前设置 set(CMAKE_TOOLCHAIN_FILE D:/vcpkg/scripts/buildsystems/vcpkg.cmake) project(demo)注意上述方法优先级命令行参数-DCMAKE_TOOLCHAIN_FILE...的优先级最高会覆盖配置文件。跨平台不同平台可能需要不同的工具链文件可以在CMakePresets.json中为每个平台定义不同的 preset。兼容性Visual Studio 旧版本可能不支持CMakePresets.json需使用CMakeSettings.json。3.排查思路1作者使用的是cmakepresets.json在其中设置了CMAKE_TOOLCHAIN_FILE变量无奈还是报错然后在VS2022中查看配置cmake时的输出信息命令行: C:\WINDOWS\system32\cmd.exe /c %SYSTEMROOT%\System32\chcp.com 65001 NUL D:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe -G Ninja-DCMAKE_TOOLCHAIN_FILE:STRINGD:\Program Files\Microsoft Visual Studio\2022\Professional\VC\vcpkg/scripts/buildsystems/vcpkg.cmake-DCMAKE_BUILD_TYPE:STRINGDebug -DCMAKE_INSTALL_PREFIX:STRINGD:/git/3rdParty/cglib -DCMAKE_MAKE_PROGRAMD:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\2022\PROFESSIONAL\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe D:\git\cglib 21显然当前环境的环境变量VCPKG_ROOT 已经覆盖了我本地设置的变量值并且VS启动cmake时以-DCMAKE_TOOLCHAIN_FILE方式传递了该值优先级最高继续排查~同时CmakeCache.txt中也是2作者使用上述方法三设置不管用因为VS启动cmake时以-DCMAKE_TOOLCHAIN_FILE方式传递了该值优先级最高继续排查~3作者在VS2022的工具》选项中的vcpkg程序包管理器中设置依然没有解决问题4.解决问题好吧虽然按论及来说咱没有使用cmakesetting.json但还是配置下吧注意cmakeToolchain变量值的设置{ configurations: [ { name: x64-Release, generator: Ninja, configurationType: Release, inheritEnvironments: [ msvc_x64_x64 ], buildRoot: ${projectDir}\\out\\build\\${name}, installRoot: ${projectDir}\\out\\install\\${name}, cmakeCommandArgs: , buildCommandArgs: -v, ctestCommandArgs: , cmakeToolchain: D:/git/vcpkg/scripts/buildsystems/vcpkg.cmake } ] }同时配合上述方法三cmake_minimum_required(VERSION 3.20) # 必须在 project() 之前设置 set(CMAKE_TOOLCHAIN_FILE D:/vcpkg/scripts/buildsystems/vcpkg.cmake) project(demo)问题解决......来看CmakeCache.txt按理来说我的VS设置中不会使用CmakeSetting.json了但是问题就是解决了......当然还有一种逻辑更靠谱的办法是卸载VS自带的vcpkg这样就不会与自己配置的起冲突了VS2022中工具》获取工具和功能5.参考1Installing and Using Packages Example: SQLitehttps://github.com/MicrosoftDocs/vcpkg-docs/blob/main/vcpkg/examples/installing-and-using-packages.md#cmake2自定义 CMake 生成设置https://learn.microsoft.com/zh-cn/cpp/build/customize-cmake-settings?viewmsvc-1703CMAKE_TOOLCHAIN_FILEhttps://cmake.com.cn/cmake/help/latest/variable/CMAKE_TOOLCHAIN_FILE.html4deepseek和微软Copilot