[CMake] ?==?utf-8?q? Looking for an explanation: What exactly means "install" in cmake language?

Cornelis Bockemühl cornelis at bockemuehl.ch
Mon Oct 7 11:47:13 EDT 2019


>Le lun. 7 oct. 2019 à 16:49, Cornelis Bockemühl <cornelis at bockemuehl.ch> a écrit :
>
>> Thanks to both you and J Decker: I would say that this is still the part
>> that I understood! So basically the word "install" in cmake language could
>> be replaced by "copy" more or less in common human language - right?
>
>Nope I oversimplified.
>This is not a bare copy, e.g. the runtime path (a.k.a. RPATH or RUNPATH) is
>updated as well.

Well yes, I understood that there are "some" other things happening - and I
did not think about RPATH or RUNPATH - because so far I never cared for them...
At this moment I finally have a setup running where shared libraries are
simply copied over with configure_file - without care for RPATH etc. -,
and it's working finally!

But definitely now like the inventors of cmake have thought it should, with
a lot reinventing wheels etc...

>> But then, if it is about "installing" a "target", which is libraries in my
>> case, I would expect the shared libraries to be copied - no?
>
>Yes the shared lib should be coped and its RPATH updated.
>
>> And this is exactly what does not happen - for no obvious reason! Because
>> some days ago it even happened in my project ONCE - and then not any more.
>> But debugging is not easy because since that moment I changed many things,
>> and basically the reason for my question is that I have no clear idea what
>> EXACTLY should happen if I put a
>>
>> install(TARGETS mylibrary)
>>
>> into my CMakeLists.txt. Well, like you explained, and like what I also
>> thought I had understood: nothing should happen during the configure and
>> generate runs of cmake, and also not during the "ninja all" build run, but
>> only during the "ninja install". or else cmake --build . --target install
>> (which in turn calls ninja in my case). Indeed I observed that it does a
>> build for "all" first if the initial project is not up to date.
>>
>> But then it tells me that it is successfully "installing" mylibrary, but
>> I see no shared library appearing in the install tree! Or rather: it
>> happened once, but not any more - and I should find out what is missing...
>
>Are building out-of-tree? (Are your source tree and build tree separate dir?)
>If so, did you try removing the entire build tree and try again ?

Yes, it's out of tree. And also I did this removal and rebuild!

This is exactly how I realized my problem: I had done once an "install build"
that copied library files to the target - and everything looked find from then
on. Until I did that exercise - and realized that nothing is copied any more!

And because I could not find any plausible reason why this library copying did
not happen any more, I gave this "install" business up for the moment...

>May be there is probably some mixup with your install DESTINATION in your
>install command.

The problem is that I did not even change anything in that part of the project
from the moment when it "accidentally" happened once...

But sure, it is never pure magic: I MUST have done something "wrong"!

>> My current workaround is indeed that I am trying to avoid the install
>> step altogether and build a crazy construction with configure_file stuff
>> in order to get the libraries to the right place - and I know pretty
>> well that this is NOT the way how things should be done properly. But I
>> am afraid I will be ready with this workaround way faster than I will
>> understand what is going on during this miraculous "install" process!
>
>Provide us with a stripped down non-working example and we may dig into it.
>Otherwise it is very difficult to guess what is happening in your particular
>case.

That's exactly my problem: I am working on a ParaView custom project, and
then trying to "derive" another one from the first! So there is nothing
to be easily "stripped down" - it is simply a monster project - and I am
almost sure if I am going to write a simple dummy project, everything will
just work fine...

And this is why I was asking for a more thorough documentation that what
you can find at Kitware where not the processes are explained, but just
"what to do".

So from what I see, if you start a cmake project from scratch, you can start
with simple concepts and add towards more complex ones, with growing
understanding. However, if you start to build on ParaView, you start in
the middle of an already highly complex project setup, with little documentation
than just examples - and the entire process feels a bit like learning
C++ with only the source code of a C++ compiler at hand: certainly possible,
but takes a horrible amount of time... ;-)

Side remark: Regarding cmake, this is also the reason why some days ago
I was asking for certain improved functionalities for debug support, like
a way to simply dump a list of "current targets" (including imported!),
plus a way to dump also all valid "properties" of targets!

Bottom line: Since such a documentation like I would like to find may not
even exist, I think I should be happy that I have a "somehow working"
solution for the moment!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20191007/235432bc/attachment-0001.html>


More information about the CMake mailing list