[CMake] ExternalProject() Question

Michael Wild themiwi at gmail.com
Thu Dec 17 10:53:39 EST 2009


On 17. Dec, 2009, at 15:01 , David Cole wrote:

> On Thu, Dec 17, 2009 at 3:20 AM, Michael Wild <themiwi at gmail.com> wrote:
> 
>> 
>> On 16. Dec, 2009, at 20:35 , Michael Jackson wrote:
>> 
>>> I am intrigued by the "ExternalProject" feature of CMake 2.8. One
>> question that I have after reading through the Oct 09 "Kitware Source" is
>> this. If I do a "make clean" or "rebuild" are all the "ExternalProjects"
>> also cleaned/rebuilt? I could make an argument both ways but I was curious
>> what the default was?
>>> 
>>> One of my projects depends on HDF5, Tiff, Expat and Boost (And Qt
>> Eventually). Writing directions to get everything downloaded and built is
>> getting to be a pain. Would be simpler to have all that done for the user.
>>> 
>>> Thanks for any comments
>>> _________________________________________________________
>>> Mike Jackson                  mike.jackson at bluequartz.net
>>> BlueQuartz Software                    www.bluequartz.net
>>> Principal Software Engineer                  Dayton, Ohio
>>> 
>> 
>> "make clean" behaves a bit strange for me... It seems to remove some of the
>> stamp files, but does not actually perform a "clean" on the external
>> project, or wipe the extracted sources. For me, this is a bit of a problem,
>> since the PATCH_COMMAND will try to re-apply a patch, which of course will
>> fail. Not sure how to teach CMake to not re-patch a source tree... Perhaps
>> wrap the whole thing in a apply_patch.cmake script which creates its own
>> stamp in the external source tree and only applies the patch if that stamp
>> does not exist...
>> 
>> 
> Michael Wild's observations are correct. The "make clean" of the outer
> project is going to wipe all the stamp files causing all of the steps to
> re-run again, including downloads and checkouts.
> 
> Since the patch command is empty by default and 'patch' is not readily
> available on Windows, the patching stuff is less well tested than the rest
> of the steps.
> 
> I guess I would be inclined to say that an outer/main-project "make clean"
> ought to default to cleaning the inner/nested/external projects as well...
> but it's not clear to me that there's a reasonable way to implement that
> quickly and easily. It's certainly worthy of a feature request and some
> discussion. And whatever the default behavior is, it should probably be
> controllable by one or more new arguments to the ExternalProject_Add
> function.
> 
> Let me know if you have further ideas and suggestions.
> 
> 
> Thanks,
> David Cole


Also, should a "make clean" really trigger a re-download? What I would like to have is a MD5SUM option to ExternalProject_Add. Currently I'm implementing this manually with a custom sub-step, but there's no reason it shouldn't be in CMake, because it natively implements -E md5sum.

Michael


More information about the CMake mailing list