How to Use the Command 'vswhere' (with Examples)
- Windows
- December 17, 2024
vswhere is a versatile command-line utility for locating installed versions of Microsoft Visual Studio 2017 and newer on Windows systems. It’s particularly useful for developers needing to integrate with the Visual Studio environment or scripts, or who require paths to specific tools and components within the Visual Studio installation. With a wide range of parameters, it provides flexibility and precision in locating exactly what you need.
Use Case 1: Find the Path of vcvarsall.bat to Set Environment Variables
Code:
vswhere -products * -latest -prerelease -find **\VC\Auxiliary\Build\vcvarsall.bat
Motivation:
Setting up the environment variables properly is essential for compiling and building C++ projects. The vcvarsall.bat
file is crucial as it configures the correct environment variables for the compiler and other tools. Locating this script becomes necessary when automating build processes to ensure that the development environment is correctly configured.
Explanation:
- -products *: This option specifies that the command should look for all installed products. By using the wildcard
*
,vswhere
considers all product installations indiscriminately, ensuring no installation is overlooked in the search. - -latest: This flag instructs
vswhere
to return information on the latest installation of Visual Studio. Developers often prefer working with the newest tools and features, making this option ideal. - -prerelease: Instructs
vswhere
to include any pre-release versions in its results. This is particularly helpful for developers who are working with beta or preview releases. - -find **\VC\Auxiliary\Build\vcvarsall.bat: The
-find
flag allows you to specify the relative path to the file you’re looking for within the Visual Studio installations. The pattern\*\*\VC\Auxiliary\Build\vcvarsall.bat
is a recursive glob pattern used to locate thevcvarsall.bat
file within any folder namedVC\Auxiliary\Build
, which is a common location for setup scripts.
Example Output:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat
Use Case 2: Find the Directory of the x64 MSVC Compiler (cl.exe, etc)
Code:
vswhere -products * -latest -prerelease -find **\Hostx64\x64\*
Motivation:
For developers building 64-bit applications, having access to the x64 compiler executable and its associated tools such as cl.exe
is vital. This information is particularly useful when integrating the compiler into external build tools or custom automated scripts where paths need to be specified explicitly.
Explanation:
- -products *: Ensures all Visual Studio installations are considered by
vswhere
. - -latest: Narrows down to the most recent installation, where typically improvements and updates have been applied.
- -prerelease: Includes any available pre-release installations, often containing cutting-edge compiler optimizations and features.
- -find **\Hostx64\x64*: Searches for any file or folder under the
Hostx64\x64
directory, which is commonly where the x64 compiler files reside, including core compiler utilities likecl.exe
.
Example Output:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
Use Case 3: Find the Directory of Clang Bundled with Visual Studio
Code:
vswhere -products * -latest -prerelease -find **\Llvm\bin\*
Motivation:
Clang is a popular compiler toolchain that complements MSVC in various scenarios, such as cross-platform development or performance testing. Visual Studio’s inclusion of Clang offers language compatibility and additional diagnostic tools. Consequently, knowing where the Clang binaries are located is fundamental for developers who wish to leverage these tools within the Visual Studio ecosystem or alternative build environments.
Explanation:
- -products *: Broadly queries all available Visual Studio installations.
- -latest: Selects the most recent setup, which is beneficial for leveraging support for the latest language standards and diagnostics.
- -prerelease: Checks both stable and pre-release versions of Visual Studio, potentially providing access to newer Clang features.
- -find **\Llvm\bin*: This flag points the command to search within the
Llvm\bin
directories where Clang’s executables, likeclang-cl
andclang-tidy
, are typically installed with Visual Studio.
Example Output:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\bin
Use Case 4: Find the Path of MSBuild.exe
Code:
vswhere -products * -latest -prerelease -find MSBuild\**\Bin\MSBuild.exe
Motivation:
MSBuild.exe
is the build platform for .NET and Visual Studio, serving as a crucial component for building applications. It is intensely used in continuous integration pipelines to automate the build process, making the ability to find its path imperative for setting up these processes effectively and reliably.
Explanation:
- -products *: Allows queries across all Visual Studio products, ensuring comprehensive search across any version that might have MSBuild installations.
- -latest: Limits the search results to the most recent installation of Visual Studio, usually equipped with the latest version of MSBuild.
- -prerelease: Ensures that even development or beta versions are considered, granting access to the latest MSBuild features which can be critical for developers wanting to exploit new functionalities.
- -find MSBuild**\Bin\MSBuild.exe: Specifically targets the directory hierarchy leading to
MSBuild.exe
, encapsulating typical directory structures underMSBuild
havingBin
subfolders.
Example Output:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe
Conclusion:
The vswhere
command proves to be an indispensable tool for developers who rely on Microsoft Visual Studio in their build environments. Its capability to locate specific files and directories across installations enhances automate processes and reduces errors caused by incorrect environment configurations. By providing a methodical approach to finding crucial development files, vswhere
helps streamline workflows and supports a more efficient development process.