[CMake] Are the [Project name]_SOURCE_DIR variables stored in the cache ?

Glenn Coombs glenn.coombs at gmail.com
Thu May 1 14:38:37 EDT 2014


Okay, I think I understand what you're saying.  Variables set in a
CMakeLists.txt file added by add_subdirectory are only visible in that
CMakeLists.txt and any further ones it adds via add_subdirectory.  The
higher level CMakeLists.txt files would not have the necessary visibility,
hence the need to cache the project source directory variable.  To make it
behave consistently it would be necessary for cmake to be able to set a
variable in the scope of the top level CMakeLists.txt.  Similar to the
PARENT_SCOPE that the set() command already has, something like
set(foo_SOURCE_PROJECT "path/to/source" ROOT_SCOPE).

I suspect that the reason cmake is caching these variable is because the
set() command doesn't have a ROOT_SCOPE ability and using cache variables
was the easiest way to simulate that.  And we have to live with the
unfortunate side effect that the cached variables don't exist on the first
run but do on subsequent runs.


On 1 May 2014 19:00, John Drescher <drescherjm at gmail.com> wrote:

> On Thu, May 1, 2014 at 1:54 PM, Glenn Coombs <glenn.coombs at gmail.com>
> wrote:
> > What I am saying is that project("foo") should internally execute the
> > equivalent of set(foo_SOURCE_DIR "/path/to/source") rather than set(foo
> > "/path/to/source" CACHE STRING).  That way it would fail on every run if
> you
> > referenced a project source directory variable before you had done the
> > add_subdirectory() for that project.  Currently in that situation it
> fails
> > the first time you run cmake but works as expected on subsequent runs of
> > cmake, which I think is odd behaviour.
> >
>
> I am saying making this change to not cache the source folder would break
>
> cmake binfolder
>
> and
>
> cmake --build buildfolder
>
> and several other commands that have worked this way for years.
>
> John
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20140501/a7bf5903/attachment.html>


More information about the CMake mailing list