[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