[CMake] [EXTERNAL] Re: CMake and Ninja, RERUN_CMAKE useless?

Nagurne, James j-nagurne at ti.com
Wed Oct 9 12:00:49 EDT 2019


That's the piece of the puzzle I was missing. Thank you!

Yes, I had deleted the cache because I thought that would force a complete regeneration. I'm using a rather complicated system of ExternalProjects (LLVM),  so I figured it was the quickest way to essentially force cmake to start from the beginning and reload those cache files without invalidating and forcing a rebuild of the executables and libraries I had already built

Is there a way to do what I was looking for? I wouldn't be surprised if there wasn't, since removing those very fundamental building blocks might as well just be an rm -rf ./*

JB

-----Original Message-----
From: Robert Maynard [mailto:robert.maynard at kitware.com] 
Sent: Wednesday, October 9, 2019 7:16 AM
To: Nagurne, James
Cc: cmake at cmake.org
Subject: [EXTERNAL] Re: [CMake] CMake and Ninja, RERUN_CMAKE useless?

The default generator and all other associated information ( '-D' ) is
kept in the CMakeCache.txt file in the root of the build directory.
The execution of `cmake -S <source_dir> -B <binary_dir>` will reload
this cache before doing anything else. Have you verified that your
build directory hasn't deleted this file?

On Tue, Oct 8, 2019 at 8:31 PM Nagurne, James via CMake <cmake at cmake.org> wrote:
>
> Hi all,
>
>
>
> My question comes from a Ninja generator build system, and is specifically about an internal rule generated by cmake.
>
> What is the purpose of the RERUN_CMAKE rule generated by CMake with a Ninja generator?
>
>
>
> In the current repo, the only reference to this rule is in WriteTargetRebuildManifest here
>
> At line 1285, the rule is written out, seemingly as-is.
>
>
>
> According to lines 1274 to 1284, the only actual behavior of this command, which is executed whenever the source CMakeLists.txt file, files included from the CMakeLists, and some other CMake installation files change, is:
>
> cmake -S <source_dir> -B <binary_dir>
>
>
>
> This seems completely insufficient for “re-running” cmake. The most obvious flaw is the absence of the generator. When I’ve seen this rule fire, my Ninja build system adds a useless Makefile to the build system, and then (hopefully) continues building as if nothing had been done at all, without so much as inspecting that Makefile.
>
>
>
> What about command-line arguments like -D?
>
>
>
> Am I missing the purpose of this rule or potentially doing something non-standard? The reason I send an email is because this behavior is sending my project into a cmake loop where it detects build.ninja is out of date, re-runs cmake to generate a Makefile instead of a ninja build system, and then infinitely repeats because it never actually re-ran anything.
>
>
>
> Thanks,
>
> JB
>
> Code Generation
>
> Texas Instruments
>
> --
>
> 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


More information about the CMake mailing list