[CMake] How do you handle recursive dependencies in CMake
Raymond Wan
rwan.work at gmail.com
Tue Jun 28 05:52:09 EDT 2016
Hi Sven,
On Tue, Jun 28, 2016 at 5:26 PM, Sven Baars <s.baars at rug.nl> wrote:
> Hey all,
>
> Since I did not receive a reply to my previous mail, I decided to write a
> minimal example explaining my problem, where I kept al the names as I used
> in my previous mails. I hope that after seeing my example, someone can
> explain me what I am doing wrong here. I included a script that reproduces
> the problem.
>
> Cheers,
> Sven
I'm not much of an expert with CMake, but I can explain to you what
I've done, at least.
If I understand correctly, package X makes use of package Y, but
during compilation, it cannot find it? I think what you can do
depends on whether X and Y are in two separate source trees.
If they are, then it is almost like Y is the zlib library. Then what
you can do is, like the zlib library, install it into a system
directory (i.e., via INSTALL ()) and then X will use a FIND_PACKAGE to
look for it.
But, suppose Y isn't like zlib. For example, it is a library that is
within the same source tree and will only ever be used by X (both of
which are written by you). I think this is the scenario that you're
talking about? In my case, I have done this in my CMakeLists.txt:
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
I guess you can set it
[https://cmake.org/cmake/help/v3.3/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.html]
to anything so that all of the libraries will be installed into one
place without doing an INSTALL. Of course, this directory is or
somewhere within the build/ directory. (I suppose doing an install
into ${CMAKE_BINARY_DIR} would achieve the same thing?)
I had previously installed Y's archive into a system directory, but
besides the need to run FIND_PACKAGE, I thought it was "silly" to
install an archive into a system directory that is only used by my own
program. Seems a bit messy and intrusive to the end-user -- my
libraries are quite unlike zlib; few chance someone else will use it
:-) . At the very least, this approach keeps it in one place within
build/ .
I'm not sure if it is the "right" way to do it, but this is what I do
at the moment... I hope it helps!
Ray
More information about the CMake
mailing list