[CMake] How to skip steps and use default values in ExternalProject_Add command?
Cedric Doucet
cedric.doucet at inria.fr
Thu May 21 08:31:32 EDT 2015
Thank you very much for your help, Petr!
I will try it!
Cheers,
Cédric
----- Mail original -----
> De: "Petr Kmoch" <petr.kmoch at gmail.com>
> À: "Cedric Doucet" <cedric.doucet at inria.fr>
> Cc: cmake at cmake.org
> Envoyé: Jeudi 21 Mai 2015 14:21:48
> Objet: Re: [CMake] How to skip steps and use default values in
> ExternalProject_Add command?
> No idea on this one. The trick I showed is "vanilla CMake," a direct
> consequence of the CMake parsing & string processing algorithm. What you're
> asking is about the internals of ExternalProject_Add, of which I know
> nothing.
> Petr
> On Thu, May 21, 2015 at 1:43 PM, Cedric Doucet < cedric.doucet at inria.fr >
> wrote:
> > Hi Petr!
>
> > Thank you for the trick: it's very powerful!
>
> > Does this mean that these two calls are equivalent if I write:
> > set(the_configure_command CONFIGURE_COMMAND) ?
>
> > ExternalProject_Add(${${LIBRARY}_LOWERNAME}
>
> > PREFIX ${${LIBRARY}_PREFIX}
>
> > URL ${${LIBRARY}_URL}
>
> > ${the_configure_command}
>
> > )
>
> > ExternalProject_Add(${${LIBRARY}_LOWERNAME}
>
> > PREFIX ${${LIBRARY}_PREFIX}
>
> > URL ${${LIBRARY}_URL}
>
> > )
>
> > I guess the default value of CONFIGURE_COMMAND will be used, right?
>
> > Cédric
>
> > > De: "Petr Kmoch" < petr.kmoch at gmail.com >
> >
>
> > > À: "Cedric Doucet" < cedric.doucet at inria.fr >
> >
>
> > > Cc: cmake at cmake.org
> >
>
> > > Envoyé: Jeudi 21 Mai 2015 13:33:27
> >
>
> > > Objet: Re: [CMake] How to skip steps and use default values in
> > > ExternalProject_Add command?
> >
>
> > > Hi Cedric.
> >
>
> > > When doing things like that, remember that CMake's "named arguments" are
> > > arguments just like any other. So you can easily obtain them from
> > > variable
> > > expansion; something like this:
> >
>
> > > if(${LIBRARY}_CONFIGURE_COMMAND)
> >
>
> > > set(the_configure_command CONFIGURE_COMMAND
> > > ${${LIBRARY}_CONFIGURE_COMMAND})
> >
>
> > > else()
> >
>
> > > set(the_configure_command "")
> >
>
> > > endif()
> >
>
> > > ExternalProject_Add(${${LIBRARY}_LOWERNAME}
> >
>
> > > PREFIX ${${LIBRARY}_PREFIX}
> >
>
> > > URL ${${LIBRARY}_URL}
> >
>
> > > ${the_configure_command}
> >
>
> > > BUILD_COMMAND ${${LIBRARY}_BUILD_COMMAND}
> >
>
> > > INSTALL_COMMAND ${${LIBRARY}_INSTALL_COMMAND}
> >
>
> > > )
> >
>
> > > The same trick can be applied to any other command you need to
> > > conditionally
> > > exclude, of course.
> >
>
> > > Petr
> >
>
> > > On Thu, May 21, 2015 at 1:10 PM, Cedric Doucet < cedric.doucet at inria.fr >
> > > wrote:
> >
>
> > > > Hello,
> > >
> >
>
> > > > I would like to loop on a list of libraries to download and install, by
> > > > calling the ExternalProject_Add command for each of these libraries.
> > >
> >
>
> > > > To do that, I need to define some commands for each library, like
> > > > CONFIGURE_COMMAND, BUILD_COMMAND and INSTALL_COMMAND.
> > >
> >
>
> > > > These commands may differ from one library to another; for example,
> > > > some
> > > > of
> > > > them may be based on make, or autoconfig, or cmake, etc.
> > >
> >
>
> > > > Furthermore, some of these libraries may not need to be built.
> > >
> >
>
> > > > What is the good way to skip some steps?
> > >
> >
>
> > > > Is it possible to use default values for some commands?
> > >
> >
>
> > > > The problem in my situation is that I have to fill in each command
> > > > since
> > > > I
> > > > want to design way of downloading and installing third party libraries.
> > >
> >
>
> > > > To be clear, I wrote a loop which looks like this:
> > >
> >
>
> > > > ==========================================================================
> > >
> >
>
> > > > foreach(LIBRARY IN LISTS NOT_FOUND_LIBRARIES)
> > >
> >
>
> > > > ExternalProject_Add(${${LIBRARY}_LOWERNAME}
> > >
> >
>
> > > > PREFIX ${${LIBRARY}_PREFIX}
> > >
> >
>
> > > > URL ${${LIBRARY}_URL}
> > >
> >
>
> > > > CONFIGURE_COMMAND ${${LIBRARY}_CONFIGURE_COMMAND}
> > >
> >
>
> > > > BUILD_COMMAND ${${LIBRARY}_BUILD_COMMAND}
> > >
> >
>
> > > > INSTALL_COMMAND ${${LIBRARY}_INSTALL_COMMAND}
> > >
> >
>
> > > > )
> > >
> >
>
> > > > endforeach(LIBRARY)
> > >
> >
>
> > > > ==========================================================================
> > >
> >
>
> > > > However, if a library is based on cmake, I do not need to specify
> > > > commands
> > > > for configuration and building.
> > >
> >
>
> > > > Is it possible to say that the default value of CONFIGURE_COMMAND will
> > > > be
> > > > used for example?
> > >
> >
>
> > > > The only way I know to do that is to suppress the line defining
> > > > CONFIGURE_COMMAND but I can't do that since other libraries may need to
> > > > define it.
> > >
> >
>
> > > > To skip steps, I replace the corresponding command by 'ls' but it's not
> > > > very
> > > > clean.
> > >
> >
>
> > > > That is to say, the value of ${LIBRARY}_CONFIGURE_COMMAND is 'ls' when
> > > > I
> > > > want
> > > > to skip the configuration step.
> > >
> >
>
> > > > Thank you very much for your help.
> > >
> >
>
> > > > Cédric
> > >
> >
>
> > > > --
> > >
> >
>
> > > > Powered by www.kitware.com
> > >
> >
>
> > > > Please keep messages on-topic and check the CMake FAQ at:
> > > > http://www.cmake.org/Wiki/CMake_FAQ
> > >
> >
>
> > > > Kitware offers various services to support the CMake community. For
> > > > more
> > > > information on each offering, please visit:
> > >
> >
>
> > > > CMake Support: http://cmake.org/cmake/help/support.html
> > >
> >
>
> > > > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> > >
> >
>
> > > > CMake Training Courses: http://cmake.org/cmake/help/training.html
> > >
> >
>
> > > > Visit other Kitware open-source projects at
> > > > http://www.kitware.com/opensource/opensource.html
> > >
> >
>
> > > > Follow this link to subscribe/unsubscribe:
> > >
> >
>
> > > > http://public.kitware.com/mailman/listinfo/cmake
> > >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150521/72ef898a/attachment.html>
More information about the CMake
mailing list