As mentioned in the recent editor news blog post, we have been working on integrating Clangas a replacement for our current C++ code-model in Qt Creator. While we are still in an early stage, we feel that it is now in a state where others can look at it, play with it, and even contribute to it.
Now I hear some people thinking: “But I already have a compiler!” I get this reaction a lot when I tell this to people. So first of all: a code-model is not a compiler, so you still need your own favourite one.
The code-model is the part of an IDE that “understands” the language you are using to write your application. It is the framework which allows us to provide:
As such it needs to have a parser for the language, and the semantic analyses. The only difference with a compiler is that a code-model does not generate an executable.
Switching from our current code-model to Clang gives us some important improvements. Most notable of these is that Clang is an actual compiler which means that the information we get out of it is correct. So the feedback you get through warning and error markers is the same as the compiler will give you, not an incomplete set or a close approximation. When we are talking about those diagnostics: Clang focusses on detailed information for diagnostics, which is really useful in those rare cases where a developer makes a typo
Also, Clang already supports C++98/03, C89 and C99, Objective-C (and Objective-C++), and C++11 support is in active development.
But all those good things do not come for free. When using Clang as code-model it does not need to generate object files, but it still needs to parse and analyse the source files. For small projects which only use STL, this works okay. But for bigger projects like Qt Creator, which uses large parts of Qt, processing a single file and all the included files can take a while. For this we use one or more pre-compiled headers, and with the current integration you will have to manually add them to your project or point Qt Creator to it. More details below.
The current integration uses Clang for:
Please notice that some of the above items still only work in a limited range of situations.
First you need to compile Clang/LLVM, either version 3.0 or trunk. Build instructions can be found on the LLVM website. If you want to use git instead of svn, use llvm.git and clang.git. Please make sure that you do a release (optimised) build!
The Qt Creator integration is in the wip/clang branch in the git repository on gitorious. Building Qt Creator works as usual: run qmake, then make, and depending on your platform a make install. If you are on Linux/Mac and do not have the directory with llvm-config in your path, or if you are on Windows, you can use the
LLVM_INSTALL_DIR qmake variable to tell qmake where to find the Clang/LLVM libraries and headers.
When starting Qt Creator, make sure the clang libraries are in the library search path by including the
<llvm-install-prefix>/lib directory in your
LD_LIBRARY_PATH (Linux), or in the PATH (Windows).
You can use this version of Qt Creator as you would do with any other version. However, there is one thing to keep in mind: if you use big libraries like Qt or Boost in your project, you can speed up the code-model (and therefore the highlighting and completion) quite a bit by defining one or more pre-compiled header(s). For a typical Qt project, this header can consist of:
Only header files that do not change (so those which are part of the system), otherwise the pre-compiled header needs to be re-generated, which in turn negates the caching advantage.
There are two ways to do tell Qt Creator to use this header as a cache:
PRECOMPILED_HEADER = pch.h
As mentioned at the beginning of this post, this release is mainly targeted towards people who would like to contribute, because no, we are not finished. There is still quite some work to do, so if you feel like helping out, let us know! The main communication channel is the qtcreator mailing-list, and #qt-creator on freenode.
Source Qt Labs Developer Blog