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

J Decker d3ck0r at gmail.com
Mon Oct 7 11:16:45 EDT 2019


A note - INSTALL( FILES ) is only good for data files, if you have scripts
that have executable permissions using INSTALL( PROGRAMS ) will get execute
flag set too.

On Mon, Oct 7, 2019 at 7:49 AM Cornelis Bockemühl <cornelis at bockemuehl.ch>
wrote:

> 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?
>
> 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?
>
> Targets use  ,... depending on add_executable, or add_library was used(
and/or if STATIC/SHARED is specified in add library )


> 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)
>
I usally put it immediately after the thing that added the target...

>
> 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.
>
right, it's an 'install' target.. make install ; ninja install, ... etc ya

>
> 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...
>
When I have issues like that, `cmake --trace ...`  option gives a good idea
of what cmake thinks it's doing...  or maybe ninja V=1 install ?
It is copy-if-different, so if the build re-builds and generates the same
output library it won't re-install...

You can set set( CMAKE_INSTALL_MESSAGE "LAZY" )  which only emits messages
for things it actually installs.... (just a side note)

But I don't know why it's not going where you think it is ( somewhere in
CMAKE_BINARY_DIR IIRC?  or did you use CMAKE_CURRENT_BINARY_DIR which can
be deeply in install)  I do often set my install to 'output' which by
default is put into the build directory...


> 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! --
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20191007/0c68af41/attachment.html>


More information about the CMake mailing list