-
Notifications
You must be signed in to change notification settings - Fork 163
Building cquery
To get started building cquery, first install the required dependencies:
- CMake 3.1 or higher
- C++ Compiler with C++14 support:
- Clang 3.6 or higher
- GCC 5 or higher
- MSVC 2017 or higher (included with VS2017 Build Tools)
After installing the required dependencies, open your terminal and run the following commands:
git clone --recursive https://github.com/cquery-project/cquery.git
cd cquery
git submodule update --init
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=release -DCMAKE_EXPORT_COMPILE_COMMANDS=YES
cmake --build .
cmake --build . --target install
Change the -DCMAKE_INSTALL_PREFIX=<dir to your choice>
to install the binary to a place you want.
This command generates project files for your system's default generator (Linux: make, Windows: MSBuild). CMake defaults to a Release build and links cquery against the libclang library which it downloads from https://releases.llvm.org.
[Windows]
On Windows you have to explicitly tell CMake to target 64-bit
architecture by adding the -DCMAKE_GENERATOR_PLATFORM=x64
option to the cmake
invocation (cmake -DCMAKE_GENERATOR_PLATFORM=x64 ..
). 32-bit builds are not
supported.
After CMake configuration cquery can be built from the root of the source tree
by executing the corresponding generator command (Linux: make
, Windows:
MSBuild.exe
) or the generic CMake build command (cmake --build .
).
Due to how MSBuild works you it is impossible to default to a
release build when MSBuild is used as the CMake generator. Instead the config
has to be specified to MSBuild when building the project (after the configure
step). The command to build then becomes: cmake --build . --config release
Finally, install cquery by executing the install target
(cmake --build . --target install
). This step is not optional and cquery might
not work completely or at all if it is executed from the build directory. By
default CMake installs to a directory that requires admin privileges to install
to but this can be avoided by explicitly specifying the install directory with
CMAKE_INSTALL_PREFIX
When using MSBuild we have to add the release config when
installing as well: cmake --build . --target install --config release
CMake options can be specified when running CMake to change its behaviour.
Options are passed to CMake via the command line by prepending them with -D. For
example: cmake -DCMAKE_BUILD_TYPE=Debug ..
configures cquery to be built in
release mode.
-DCMAKE_BUILD_TYPE=(Debug|Release)
CMAKE_BUILD_TYPE
can be used to set the build type. There are a few possible
options, but the most important ones are Debug and Release. Generally you want
to pass -DCMAKE_BUILD_TYPE=Release
to CMake to get the best performance out of
cquery. Debug is recommended when debugging cquery with a debugger. Since cquery
defaults to a Release build it usually isn't necessary to define this option
unless you're debugging an issue in cquery with a debugger.
-
-DSYSTEM_CLANG=(ON|OFF)
(NOT RECOMMENDED)
Enable SYSTEM_CLANG
if you want to link cquery against a system installation
of Clang instead of downloading Clang during the configure process.
Using a system-installed Clang is NOT recommended. Using cquery with a modified or earlier release of Clang will lead to bugs and errors when using cquery.
-DCMAKE_PREFIX_PATH="custom_install_path"
When you want to use a system installed Clang but it is not installed into any
default CMake search location (for example if you built LLVM from source) you
can tell CMake where to search by adding search paths to CMAKE_PREFIX_PATH
.
CMake searches the paths in CMAKE_PREFIX_PATH
for 'include' and 'lib'
subdirectories containing the required Clang headers and libraries. For example,
to use a system installation of Clang on Windows you can add the following
option: -DCMAKE_PREFIX_PATH="C:/Program Files/LLVM"
.
If the 'include' and 'lib' directories reside in two different parent
directories (possible when building LLVM from source) you will have to add both
these directories to CMAKE_PREFIX_PATH separated by a ';'
(-DCMAKE\_PREFIX\_PATH="<include-parent-dir>;<lib-parent-dir>"
).