Search code examples
cmakeninja

CMake setting to Ninja rebuild when header change?


Apparently, Ninja has to be configured to treat headers as dependencies: https://ninja-build.org/manual.html#ref_headers.

How do I tell CMake to generate this into my build.ninja?


Solution

  • If I look into my build.ninja files generated with CMake for e.g. GCC I do have the necessary dependency file entries automatically generated (see DEP_FILE):

    #=============================================================================
    # Object build statements for EXECUTABLE target MyExe
    
    build CMakeFiles/MyExe.dir/foo.cc.obj: CXX_COMPILER ../foo.cc
      DEP_FILE = CMakeFiles/MyExe.dir/foo.cc.obj.d
      FLAGS = -fdiagnostics-color=always -Wconversion
      OBJECT_DIR = CMakeFiles\MyExe.dir
      OBJECT_FILE_DIR = CMakeFiles\MyExe.dir
    

    And the dependency checking works as expected. Just touch or change one of the header dependencies and ninja will automatically rebuild the necessary sources.