[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