[cmake-developers] Was AUTOMOC designed to run for each build?
Alexander Neundorf
neundorf at kde.org
Tue Sep 23 16:27:51 EDT 2014
On Tuesday, September 23, 2014 09:58:58 Stephen Kelly wrote:
> Hi (especially Alex),
>
> I noticed that the automoc target is run each time, even for a trivial
> project:
>
> cmake_minimum_required(VERSION 2.8)
> project(automoctest)
>
> set(CMAKE_AUTOMOC ON)
>
> find_package(Qt5Widgets REQUIRED)
>
> add_executable(main main.cpp)
> target_link_libraries(main Qt5::Widgets)
>
> Each time I run make I get
>
> [ 33%] Automatic moc for target main
> /path/to/cmake -E cmake_autogen /path/to/build/CMakeFiles/main_automoc.dir/
> "
>
> I checked CMake 2.8.7 and it executes the target each time too.
>
> In the implementation, makefile->AddUtilityCommand is called with 'true' to
> set the excludeFromAll parameter.
>
> I don't see why the target is executed each time, but is it that way by
> design?
iirc, yes.
The moc files have to be generated before any of the source files is compiled,
so automoc is in a target the actual target depends on.
IIRC it is exclude_from_all so that it is only built when the actual target is
built.
Do you think it should only rerun if any of the source files has changed ?
There was some problem with this.
The headers are usually not part of the listed source files. I would have to
check to find out the details again.
Alex
More information about the cmake-developers
mailing list