[CMake] multiple CMakeLists.txt files in the same directory

Jon W knowdat at gmail.com
Wed Aug 15 11:17:44 EDT 2007


On 8/15/07, Mike Jackson <imikejackson at gmail.com> wrote:
> On 8/14/07, Jon W <knowdat at gmail.com> wrote:
> > On 8/14/07, Filip Brcic <brcha at users.sourceforge.net> wrote:
> > > Дана уторак 14 август 2007, Jon W је написао(ла):
> > > > > > > Is it possible to have multiple CMakeLists.txt files within the same
> > > > > > > directory? (We have projects that span/share multiple directories,
> > > > > > > and currently all of the vcproj files are within a single directory
> > > > > > > for easy editing.)
> > > > > > >
> > > > > > > Or, is the suggested route to create a directory structure such as,
> > > > > > >
> > > > > > > /
> > > > > > > src/foo/foo.cxx
> > > > > > > /apple/apple.cxx
> > > > > > >
> > > > > > > cmake/foo/CMakeLists.txt
> > > > > > > /apple/CMakeLists.txt
> > > > >
> > > > > Every CMakeLists.txt file should have it's target. If you wish to make
> > > > > libraries out of every directory and then link them with main() in the
> > > > > top directory then use separate CMakeLists.txt.
> > > > >
> > > > > Filip Brcic <brcha at users.sourceforge.net>
> > > >
> > > > I'm building foo.dll, apple.dll, some.exe, from which the source is
> > > > scattered throughout the src directory.  There are no foo or apple
> > > > directories, so I can't put a CMakeLists.txt file in those specific
> > > > directories.  What I have been doing is to create a main cmake
> > > > directory (next to src) that then has a directory based upon the
> > > > dll/exe name (foo, apple) with a CMakeLists.txt inside.
> > > >
> > > > src/
> > > > cmake/
> > > >           apple/CMakeLists.txt
> > > >           foo/CMakeLists.txt
> > > >
> > > > One of the developers was hoping that we could bypass the extra
> > > > directory structure and have a general directory that has all of the
> > > > dll/exe cmake files inside.  For example,
> > > >   cmakefiles/
> > > >                   CMakeLists_apple.txt
> > > >                   CMakeLists_foo.txt
> > > >
> > > > But, this doesn't sound as though it will work very well.  Thank you
> > > > for your help.
> > > >
> > > > -Jon
> > >
> > > But you can do just that as Mike Jackson suggested. Make your
> > > cmakefiles/CMakeLists_*.txt files and then include them in some master
> > > CMakeLists.txt, possibly with IF(something) arround that.
> > >
> > > --
> > > Filip Brcic <brcha at users.sourceforge.net>
> >
> > That sounds like it would work fine if all of the options are the
> > same, but may be difficult to separate compiler options,
> > link_directories, include paths, and custom commands, per project.
> > I'm guessing that every CMakeLists_project.txt would then need to IF
> > block every listing that isn't specifically linked to that project's
> > dll/exe.
> >
> > -Jon
> >
>
> Probably what you should be doing is to have all the general cmake
> setup stuff (general sources, binary locations) setup in your top
> level CMake file. Then you will have Apple.cmake (note the extension..
> ) and in there you start listing all your apple specific compiler
> options and other options. In those platform specifc files you also
> define a variable PLATFORM_SRCS that would have your list of platform
> specific sources in it. In your Main CMakeLists.txt file you then do:
>
> SET (SRCS foo.cpp)
>
> IF (APPLE)
> INCLUDE (Apple.cmake)
> ENDIF(APPLE)
>
> IF (WIN32)
> INCLUDE (Win32.cmake)
> ENDIF(WIN32)
>
> SET (SRCS ${SRCS} ${PLATFORM_SRCS} )
>
> ADD_LIBRARY (foo SHARED ${SRCS} )
>
> The gets rid of all the extra directories. Does this help?
> --
> Mike Jackson
> imikejackson _at_ gee-mail dot com

Sorry, I used a bad reference when specifying the project apple.  With
this question, I am not trying to compile for different platforms, but
trying to compile foo.dll, fooo.exe, foo4.lib, (i.e. separate
projects) and have each project's cmakelists.txt within a single
directory.

Do you know if this is possible?

Thank you,
Jon


More information about the CMake mailing list