[CMake] Dependencies and libraries..How does it work?
Benjamin Eikel
cmake at eikel.org
Fri Jun 17 05:47:12 EDT 2011
Hello,
Am Freitag, 17. Juni 2011, 11:40:15 schrieb David Springate:
> Hi Andreas,
>
> Thanks for another reply!
>
> My question therefore is:
> How can the cmake for MY_APP start the cmake for MY_LIB?
>
> I know how to get my app to link a library, and how to add the include
> directories for the lib - so that the app can compile - but how can it
> kick-start the build for MY_LIB so that the library is guaranteed to exist
> ready to be linked? I don't want to use an external script as I'd have to
> have one for each platform - going against the point of cmake, surely?
Let's say you have your library in the directory "mylib" below your
application. In this folder, you need a "CMakeLists.txt" file with a content
similar to this:
add_library(MyLib source1.cpp source2.cpp ...)
In the top level directory you need somthing like this in your
"CMakeLists.txt":
add_subdirectory("mylib")
add_executable(MyApp main.cpp app_source1.cpp ...)
target_link_libraries(MyApp MyLib)
I hope this works for you.
Kind regards,
Benjamin
>
> Thanks again for your help so far,
>
> David
>
> On 17 June 2011 10:22, Andreas Naumann <Andreas-Naumann at gmx.net> wrote:
> > **
> > Hi,
> >
> > how should cmake find your MY_LIB-directory?
> > The simplest way, is to add the directory using
> > "add_subdirectory(MY_LIB_DIR ...)"
> >
> > If the MY_LIB-build directory is somewhere else, in a completely
> > different directory, you should think about your project structure.
> >
> > Andreas
> >
> > Am 17.06.2011 11:06, schrieb David Springate:
> >
> > Hi,
> >
> > Thanks for the reply - but I think you might have misunderstood my
> > question.
> >
> > I want to setup CMake so that when I call Cmake like so (for MY_APP):
> > mkdir build && cd build
> > cmake .. -G Xcode
> >
> > that the cmake call will be able to 'know' that it needs MY_LIB, find
> > where the MY_LIB CMakeLists.txt file is, build it, and then continue
> > with the cmake call for MY_APP.
> >
> > Any ideas?
> >
> > David
> >
> > On 17 June 2011 08:18, J.S. van Bethlehem
<j.s.van.bethlehem at astro.rug.nl>wrote:
> >> Hej David,
> >>
> >> >From your description I think all your build script needs to do is:
> >> mkdir build && cd build
> >> cmake ..
> >> make MY_APP
> >>
> >> Further, assuming your library also gets build with CMake, you probably
> >> have an add_directory(../MY_LIB ../MY_LIB) in your main lists-file
> >> (otherwise you should) and then the link_directories() command is not
> >> needed. I created sort of a 'standard' machinery for building a list of
> >> 'sub-packages' using CMake. It's not well documented and probably still
> >> has many issues, but I could mail it to you if you think it may help
> >> you get started and if you're interested.
> >>
> >> Greetsz,
> >> Jakob
> >>
> >> On 06/16/2011 11:54 PM, David Springate wrote:
> >>> Hi,
> >>>
> >>> I am new to CMake - and whilst I am immediately impressed with it's
> >>> relative ease of use - I have a 'noob' question, I'm sure!
> >>>
> >>> I have the following:
> >>> A library called MY_LIB that builds with a cmake command (I have
> >>> created a nice CMakeLists.txt file)
> >>> An application called MY_APP that builds a nice application - and even
> >>> links in MY_LIB using:
> >>> link_directories("../MY_LIB")
> >>> target_link_libraries(MY_APP MY_LIB)
> >>>
> >>> Now, first of all I know that I'm not supposed to use relative paths..
> >>> but we'll call a side issue.. (though I'd be happy to hear the correct
> >>> way of doing things!) - the real problem that I have is this:
> >>>
> >>> Give than MY_LIB is built using CMake and MY_APP is built using CMake..
> >>> how can I setup my build scripts so that I can call CMake once for
> >>> MY_APP, it'll realise that it needs MY_LIB, which hasn't yet been
> >>> built, invoke CMake for MY_LIB and then link itself with MY_APP?
> >>>
> >>> I ask because I use libraries heavily to organise my code (and reuse)
> >>> and would love to switch to CMake for all my building (XCode 4 has
> >>> forced my hand!) but I can't seem to figure this out.
> >>>
> >>> Please help a newcomer out - any help is greatly appreciated!
> >>>
> >>> Thanks,
> >>>
> >>> David
> >>
> >> _______________________________________________
> >> Powered by www.kitware.com
> >>
> >> Visit other Kitware open-source projects at
> >> http://www.kitware.com/opensource/opensource.html
> >>
> >> Please keep messages on-topic and check the CMake FAQ at:
> >> http://www.cmake.org/Wiki/CMake_FAQ
> >>
> >> Follow this link to subscribe/unsubscribe:
> >> http://www.cmake.org/mailman/listinfo/cmake
> >
> > --
> > David Springate
> > david.springate at gmail.com
> >
> >
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the CMake FAQ at:
> > http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Follow this link to
> > subscribe/unsubscribe:http://www.cmake.org/mailman/listinfo/cmake
> >
> >
> >
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the CMake FAQ at:
> > http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.cmake.org/mailman/listinfo/cmake
More information about the CMake
mailing list