[cmake-developers] RFC: add version to project() call
Matthew Woehlke
mw_triad at users.sourceforge.net
Tue Jan 14 19:46:46 EST 2014
On 2014-01-14 18:00, Alexander Neundorf wrote:
> On Tuesday 14 January 2014, Matthew Woehlke wrote:
>> While that sounds good for 99.9% of cases, what about the case of
>> project A that includes project B, where B is not updated, but A decides
>> to start using project(...VERSION...). Now if B was using
>> PROJECT_VERSION internally, it is broken. (Note that I'm implying that B
>> is e.g. a separate repository that may not be "as easy to update/fix as
>> A".)
>
> You mean
> CMakeLists.txt:
>
> project(Foo VERSION 1.2.3)
>
> ....
>
> add_subdir(B)
>
> B/CMakeLists.txt:
>
> set(PROJECT_VERSION "4.5.6")
> project(Bar)
>
>
> Indeed.
> In that case, PROJECT_VERSION will be unset afterwards.
Exactly. I wanted to point it out, but as that's probably unusual, I
would be okay ignoring that case.
> If it would be
>
> B/CMakeLists.txt:
>
>
> project(Bar)
> set(PROJECT_VERSION "4.5.6")
>
> everything is fine.
...until B/C/CMakeLists.txt also calls project() :-). Basically, you
(can) get into trouble if you "update" your project to use
project(VERSION) and also have an "external" sub-project that tries to
use PROJECT_VERSION. However, as much as folks¹ occasionally bleat about
this use case (having an embedded "external" project), I suspect it's
not actually very common², and anyway there is only a problem when the
sub-project *also* uses PROJECT_VERSION (which I suspect is also rare in
general, and more so the intersection of the two).
Again, given the above, I've no objection to breaking that case, which
may well only exist in the hypothetical sense with no 'in the wild'
instances actually existing.
(¹ Myself included; this thread being a case in point.)
(² ...though I do know offhand that ParaView does so with VTK.)
--
Matthew
More information about the cmake-developers
mailing list