[CMake] actually using cmake alternative to convenience libraries

Magnus Therning magnus at therning.org
Wed Nov 18 08:16:33 EST 2015


On Tue, Nov 17, 2015 at 09:37:25AM -0600, Jack Stalnaker wrote:
> I'm trying to figure out the best way to handle something that was a
> convenience lib under autotools. I realize that there's a FAQ entry here:
> 
> https://cmake.org/Wiki/CMake_FAQ#Does_CMake_support_.22convenience.22_libraries.3F
> 
> But its terse 2 paragraphs don't say how to actually do what it suggests.
> My problem is this. I have this source tree:
> 
> lib
> |--foo.c
> |--foo.h
> |--bar.c
> |--bar.h
> |--baz.c
> src
> |--goo.c
> 
> In lib, I need to somehow collectively refer to foo and bar. Okay, so I can
> create a variable:
> 
> set(foobarSRCS foo.c bar.c)
> set(foobarLIBS ${externalLibFound})
> 
> which is what the FAQ entry seems to suggest. However, this variable is not
> visible to goo.c. Okay, so as an alternative, I can do this:
> 
> set(foobarSRCS foo.c bar.c PARENT_SCOPE), etc.
> 
> but now the variable is not visible to baz.c, which also must include the
> srcs to create a module library called _baz! I can of course do something
> like this:
> 
> set(foobarSRCSLOC foo.c bar.c)
> set(foobarSRCS ${foobarSRCSLOC} PARENT_SCOPE)
> 
> but this feels dirty and repetitive.
> 
> I also realize that I can just create the variables in src, but that kind
> of defeats the entire purpose of walling of the common libs and their
> dependencies in the first place.
> 
> Is this the right way to work, or am I missing something simple?

From your text above it sounds like foo.{c,h} and bar.{c,h} don't really
belong together with baz.c (it's not part of the convenience lib).  So,
why not separate them?

Another thought, you can always put a CMakeLists.txt in the parent dir
to lib&src with

    set(foobarSRCS lib/foo.c lib/bar.c)

(maybe with the use of CMAKE_CURRENT_SOURCE_DIR too).

A final questin, why was it a convenience lib in the autotools setup?
Unless there's really a need to compile the files multiple times the
whole issue can be side stepped by making it a static lib.

/M

-- 
Magnus Therning                      OpenPGP: 0xAB4DFBA4 
email: magnus at therning.org   jabber: magnus at therning.org
twitter: magthe               http://therning.org/magnus

As we enjoy great advantages from the inventions of others we should
be glad of an opportunity to serve others by any invention of
ours, and this we should do freely and generously.
     -- Benjamin Franklin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 163 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake/attachments/20151118/db7ff728/attachment.sig>


More information about the CMake mailing list