[CMake] Build order
Michael Wild
themiwi at gmail.com
Mon Jun 27 07:51:17 EDT 2011
On 06/27/2011 12:00 PM, Maxime Lecourt wrote:
>
>
> 2011/6/27 Michael Wild <themiwi at gmail.com <mailto:themiwi at gmail.com>>
>
> On 06/27/2011 11:31 AM, Maxime Lecourt wrote:
> > Hello,
> >
> > I'm using CMake to build OCaml libraries.
> > For that, I use a macro that I call in my CMakeLists.txt
> >
> > As I have dependencies between my different libraries, I wrote my
> > CMakeLists.txt so the build happens in the right order, but when
> > building, libraries are built depending on alphabetical order.
> >
> > add_ocaml_library(cabs SOURCES cabs.ml <http://cabs.ml>
> <http://cabs.ml>)
> > add_ocaml_library(algo SOURCES algo.ml <http://algo.ml>
> <http://algo.ml>)
> >
> > (algo depends on cabs being already built)
> >
> > How can I create a "add_ocaml_dependencies" macro ?
> > Or is there a way to force CMake to follow the build order in the
> > CMakeLists.txt ?
> >
> > Regards
> >
> > Maxime Lecourt
> >
>
> Well, if cabs and algo are top-level targets (i.e. created via
> add_library(), add_executable() or add_custom_target()), you can simply
> call add_dependencies(algo cabs).
>
> Michael
>
>
> algo and cabs are created using add_custom_command()
>
> I tried add_dependencies(algo cabs), but it did not work.
> Would it work if i create a fake target (can I force cabs and algo as
> top-level targets, or as valid parameters for add_custom_target ?) ?
>
> add_custom_target(target1 depends cabs)
> add_custom_target(algo depends target1)
>
>
> Or something like that.
>
> Maxime Lecourt
Yes, you should create a custom target with add_custom_target(). In
CMake you have to distinguish between top-level and file-level targets.
add_custom_command() only creates a file-level target, so you need the
add_custom_target() call. Also, this will make it possible to build the
targets selectively from the command line or the IDE.
However, your above shown code is semantically wrong. Your
add_ocaml_library() macro (you probably should make it a function
instead) should contain the add_custom_target() call and give it the
name passed to the add_ocaml_library function.
Michael
More information about the CMake
mailing list