# vcpkg: Troubleshooting & Dependency Lifecycle Reference for the `vcpkg` skill. Use this when a user encounters vcpkg build failures, package-not-found errors, needs to read build logs, or manages the dependency lifecycle (removing, changing features, replacing libraries, cleaning the cache). ## Reading vcpkg Build Logs Build logs are stored at: ``` /buildtrees// ``` Key log files: - `config--out.log` — CMake configure output - `build---.log` — common build logs - `install---.log` — common install logs Exact names vary by port and build helper; use the path vcpkg prints for the failing command. When a build fails, vcpkg prints the path to the relevant log. Start with the `-err.log` file for the failing step. --- ## Resolving package-not-found After Install If CMake says `Could not find a package configuration file provided by "X"`: 1. **Check toolchain file** — ensure `-DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake` is set 2. **Check triplet match** — the installed triplet must match your build architecture 3. **Check package name** — vcpkg port names may differ from CMake package names (e.g., port `nlohmann-json` → `find_package(nlohmann_json)`) 4. **Check installed list** — run `vcpkg list` to confirm the package is actually installed 5. **Clear CMake cache** — delete `CMakeCache.txt` and reconfigure --- ## Dependency Lifecycle ### Removing a Library 1. Remove it from `vcpkg.json` → `"dependencies"` array 2. Run `vcpkg install` to reconcile (manifest mode auto-removes unused packages) In classic mode: ```console vcpkg remove boost-regex vcpkg remove boost-regex --recurse # also removes dependents ``` ### Changing Features on an Installed Library Update the features in `vcpkg.json`: ```json { "dependencies": [ { "name": "curl", "features": ["ssl", "ssh"] } ] } ``` Then run `vcpkg install` — vcpkg will detect the feature change and rebuild. In classic mode, installing a feature only adds to the already installed feature set; omitted features are not removed. To remove a feature, uninstall `curl` and then reinstall it with the desired features. Account for dependent packages before using `--recurse`, because it removes them too. ### Replacing One Library with Another 1. Remove the old library from `vcpkg.json` 2. Add the new library to `vcpkg.json` 3. Run `vcpkg install` to reconcile 4. Update your source code: change `#include` directives, `find_package()` calls, and `target_link_libraries()` in CMakeLists.txt ### Cleaning the vcpkg Cache ```powershell # Remove build trees Remove-Item -Recurse -Force \buildtrees # Remove downloaded archives Remove-Item -Recurse -Force \downloads # Remove installed packages (classic mode only) Remove-Item -Recurse -Force \installed # Remove package build artifacts Remove-Item -Recurse -Force \packages # In CLI manifest mode, remove the manifest-root install directory Remove-Item -Recurse -Force .\vcpkg_installed # With CMake integration, remove \vcpkg_installed (or VCPKG_INSTALLED_DIR) ``` ```bash rm -rf /buildtrees rm -rf /downloads rm -rf /installed rm -rf /packages # CLI manifest mode; with CMake integration, use /vcpkg_installed (or VCPKG_INSTALLED_DIR) rm -rf ./vcpkg_installed ```