[CMake] Re-configuring Debug and Release builds

I'm unable to repro this – configuring once and then reconfiguring with a different -DCMAKE_BUILD_TYPE= does the right thing for me. What's your exact invocation?

If you're setting it from a cache file, you'll need to use FORCE in the set in your cache file to override any existing cache setting.

    <paul.robinson@sony.com> writes:
    >> If I've configured a Release build, build it and then go back and re-run
    >> cmake with -DCMAKE_BUILD_TYPE=Debug (and nothing else changed), almost
    >> nothing gets rebuilt when I try to build. Is this expected? I know I
    >> can edit CMakeCache.txt directly and trigger an essentially full
    >> rebuild.
    > IME rerunning CMake with new options really does nothing; CMakeCache.txt
    > appears to override the command line, which is not intuitive but seems
    > to be how it actually works.
    I thought so too at first, except changing LLVM_TARGETS_TO_BUILD when
    re-running CMake does indeed cause any new targets to be built. So it
    can't be the case that the cache overrides everything.
    > I would hope that this is not a choice made by the LLVM project but a
    > bug/feature of CMake itself. But I haven't ever had the energy to
    > pursue it.
    https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_docs_CMake.html-23cmake-2Dcaches&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=QX_nCpK2peaty_XOC8I0mM2FCcsrB0u93ckBWasLzfU&s=krJ8pnxDwobl6hQ3IB_hpM54u0pvD5MU-Ft5l6EL__4&e= seems to imply that -D
    options should override cache values, but it doesn't for

Whether or not reconfiguring changing `CMAKE_BUILD_TYPE` does anything remotely like what you want depends on which generator you use. It will result in full rebuilds if you are using Ninja, but not Unix Makefiles. This is because Ninja treats the command that generates the output as a dependency of the output.

That said in some environments the CMAKE_BUILD_TYPE can impact the values of other cache variables that result from checks for libraries, headers, and symbols. Those cache variables may not be updated in the re-run, which could result in the build not doing what you expect.

In general many of the CMAKE_* variables like CMAKE_BUILD_TYPE and CMAKE_<LANG>_COMPILER, cannot be safely changed without a full re-configure, so I'd advise caution.