I'd also like something like that for another use case of mine which stumble upon the same limitations (compiler checks, linking and Qt generated content).

My use case is for static analysis builds. For example, my CI setup has multiple of them including cppcheck, clang-tidy and iwyu through the CMake integration. And since I'd like to keep separate builds for each of them this requires 3 full build whose results I don't really care.

So if we can achieve a light build mode, that would be great. In my case I could completely deactivate the build part including the syntax checking since that's done by the static analysis tools anyway. Thinking of that maybe we can completely disable the build invocation and add support for a "syntax only" analysis tool that would feats your need.

Anyhow, we can't deactivate all the build. As you said auto-generated content, custom targets,... would need to stay.

Sylvain

Le 09/10/2018 à 16:38, René J.V. Bertin a écrit :
Hi,

Apologies, longish post ahead. I've tried to present my idea and the thought 
train leading up to it as succinctly as possible. Hope I at least strike a 
chord!

Clang and GCC have long supported an option that makes them stop after the 
syntax-verification stage: -fsyntax-only . This has the advantage (see below) 
that it's much faster than a regular build and that no output is generated. The 
absent output is also a problem and the reason I'm posting about it here:
- compiler checking fails because of the missing output.
- link and archive (static lib) creation fail because of missing files.

The first problem should not be hard to fix (filter out -fsyntax-only from the 
arguments used to check the compiler). The 2nd problem can be addressed by 
ignoring the exit code from linking and archiving commands (possible with make, 
presumably with ninja too).

Would it be feasible to implement "something" that makes it possible to run a full 
pure-syntax-checking "build", either as a special target or as a separate mode of 
operation or CMAKE_BUILD_TYPE?

I think this could be useful in general esp. with larger projects, allowing to check 
"quickly" if a change (triggering a full rebuild) breaks something. QtWebKit 
would be an appropriate example: it uses a central header to set the configuration 
preprocessor tokens so toggling even one of these switches causes *everything* to be 
rebuilt.

Some more observations which outline a context where cmake-level support for a 
pure syntax-checking run would be beneficial (also the context that made me 
remember the -fsyntax-only option):

- a number of IDEs (can) use CMake as the basis for project definition.
- They also provide parsing facilities that also use information from cmake to 
control the parser.
- KDE has long used cmake instead of autoconf (or qmake) and is based on Qt, 
which means KDE projects depend on auto-generation of files which need to be 
included in C++ code.
- Parsing or even syntax-checking won't work to at least some degree without 
those auto-generated files.
- opening a project in an IDE is not always done with the intention to build 
it; in absence of such an intention one usually does expect to be able to rely 
on parsing and syntax checking.
- Auto-generation of Qt's automatic content occurs during a full build, when 
needed.

That last observation is the big bottleneck; a full build can be very costly. 
If there were a dedicated target to generate just all automatic content one 
could just build that target and there would be no issue left. Whether or not 
this is impossible is unclear, and at least not entirely a CMake issue.

Here too something like -DCMAKE_BUILD_TYPE=SyntaxOnly would be a workable 
solution.

R.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake

Reply via email to