[CMake] How to skip steps and use default values in ExternalProject_Add command?

Petr Kmoch petr.kmoch at gmail.com
Thu May 21 07:33:27 EDT 2015


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/df977ebc/attachment.html>


More information about the CMake mailing list