[CMake] ExternalProject_Add examples

Williams, Norman K norman-k-williams at uiowa.edu
Fri Oct 25 11:18:24 EDT 2013


There is our project here:
https://github.com/BRAINSia/NAMICExternalProjects

This is set up using the CMake 'SuperBuild' pattern first used with Slicer.

It might be more complicated a setup than you have in mind, but it builds
a large number of interdependent packages.

It's structured as a two-phase setup:  First, all prerequisite packages
are built, and then the actual project is built.  As NamicExternalProjects
is set up as a functioning prototype, the 'top-level' CMake project is
empty.

Adding a new external project is a matter of copying
SuperBuild/External_Template.cmake to
SuperBuild/External_<your_project>.cmake and editing it to make it
specific to that project. This mostly amounts to  setting its
dependencies, where to download the source from, and which version to
download.

--
Kent Williams norman-k-williams at uiowa.edu






On 10/24/13 3:35 AM, "Witold E Wolski" <wewolski at gmail.com> wrote:

>Would also like to start configuring external dependencies with
>
>ExternalProject_Add
>
>So some examples would be pretty useful to me. So did you ended up
>collecting some examples?
>Sure, you posted in this links to repositories, but finding the
>"ExternalProject_Add" in these huge projects with hundreds of
>CMakeLists.txt is not easy if they are not in the top-level
>CMakeLists.txt and they are not there.
>
>My dependencies are
>
>gtest - Cmake
>glog - Cmake
>tbb - configure make
>vigra - Cmkae based
>soci - Cmake based
>pwiz
>
>
>regards
>
>
>
>On 18 March 2012 00:24, Luigi Calori <l.calori at cineca.it> wrote:
>> On 17/03/2012 22.11, Marcus D. Hanwell wrote:
>>>
>>> On Sat, Mar 17, 2012 at 5:03 PM, Bill Lorensen<bill.lorensen at gmail.com>
>>> wrote:
>>>>
>>>> Folks,
>>>>
>>>> I've recently created a number of super builds using CMake's External
>>>> Project mechanism. Each external project requires some sort of
>>>> download, configuration, build and possibly install. The CMake defines
>>>> needed to correctly access the results of the external project vary
>>>> significantly. The trickiest part is find the proper download,
>>>> configuration and CMake defines.
>>>>
>>>> For example, for the Point Cloud Library (http://pointclouds.org/) I
>>>> created these external projects:
>>>> VTK - git, cmake, make; VTK_DIR
>>>> FLANN - zip, cmake, make install; FLANN_LIBRARY, FLANN_INCUDE_DIR
>>>> Eigen - .tar.bz2,; EIGEN_INCLUDE_DIR
>>>> Qhull - git, cmake, make;QHULL_LIBRARY,QHULL_INCLUDE_DIR
>>>> Boost - .tar.gz, bootstrap.sh, b2; BOOST_ROOT
>>>> GTest - .zip, cmake, make; GTEST_ROOT,GTEST_INCLUDE_DIR
>>>>
>>>> Slicer4 has many more.
>>>>
>>>> Should we start collecting sample ExternalProject_Add files for
>>>> external projects?
>>>
>>> We have talked about doing this too (I have Eigen, Boost, GTest and
>>> others for example). The standard CMake based projects hardly seem
>>> worth it, but it depends on what you want to do with them I suppose.
>>> For the work we are doing in chemistry we have been working on an
>>> experimental superbuild that uses a common prefix in the build tree to
>>> install to, and then all we need pass in is CMAKE_PREFIX_PATH - this
>>> can make the logic significantly easier for dependent CMake projects
>>> as it will always search within the prefix first.
>>
>> I did something similar, trying to collet all the build of stuff that I
>>had
>> to do in a single place powered by cmake
>> Used  CMAKE_PREFIX_PATH and a single source place where all the builds
>> download  and expand
>>
>> you can have a look at
>>
>> https://hpc-forge.cineca.it/svn/CmakeBuilds/lib/
>>
>> It's just for my use only, so really dirty and not properly checked, I'
>>m
>> also looking for good starting point for common stuff like Qt, boost and
>> others
>> (I' tried to collect in the folder  Packages the tricky part of building
>> the components,) I' ve tried to define a dependency graph but it' still
>> messy
>>
>> anyway I would really appreciate a place where to share good "recipies"
>>for
>> CMake building packeges
>>
>> Thanks
>>                   Luigi
>>
>>
>>
>>
>>
>>
>>>
>>> The Qt external project was pretty tricky too, and we are using that
>>> in several places along with smaller libraries like libxml2.
>>>
>>> Marcus
>>> --
>>>
>>> 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
>>>
>>
>>
>> --
>> Luigi Calori
>> SuperComputing Applications and Innovation Department
>> CINECA - via Magnanelli, 6/3, 40033 Casalecchio di Reno (Bologna) -
>>ITALY
>> Tel: +39 051 6171509  Fax: +39 051 6132198
>> hpc.cineca.it
>>
>>
>> --
>>
>> 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
>
>
>
>--
>Witold Eryk Wolski
>--
>
>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://www.cmake.org/mailman/listinfo/cmake



________________________________
Notice: This UI Health Care e-mail (including attachments) is covered by the Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential and may be legally privileged.  If you are not the intended recipient, you are hereby notified that any retention, dissemination, distribution, or copying of this communication is strictly prohibited.  Please reply to the sender that you have received the message in error, then delete it.  Thank you.
________________________________


More information about the CMake mailing list