[CMake] ExternalProject: avoiding rebuilds

Ben Medina ben.medina at gmail.com
Tue Oct 11 13:58:09 EDT 2011


As an extreme example, consider using boost's header-only libraries.
If I point external project at a boost tarball, every time I rebuild
(or make clean; make), CMake will re-extract the tarball, which is
quite slow for a tarball with so many files.

Why does CMake re-extract tarballs at all? When would this behavior be
desirable?

On Mon, Sep 26, 2011 at 10:37 AM, Ben Medina <ben.medina at gmail.com> wrote:
> John is right. The external project may be at the bottom of a chain of
> (my own) project dependencies. I need to preserve the ability to
> easily rebuild just my projects (and their dependencies), not external
> projects. Think of ExternalProject as a replacement for pre-built
> libraries, and you'll see where I'm coming from.
>
> Perhaps I need to file a feature request on Mantis.
>
> On Sat, Sep 24, 2011 at 2:32 AM, John Drescher <drescherjm at gmail.com> wrote:
>> On Sat, Sep 24, 2011 at 4:11 AM, Rolf Eike Beer <eike at sf-mail.de> wrote:
>>> Am Freitag, 23. September 2011, 16:26:46 schrieb Ben Medina:
>>>> Hello all,
>>>>
>>>> I'm trying to adopt greater usage of ExternalProject in my project.
>>>> One problem I'd like to resolve is spurious rebuilds of external
>>>> projects.
>>>
>>> [...]
>>>
>>>> This works great: building "test" first untars the CLAPACK source and
>>>> builds it, as expected. However, if I rebuild test (i.e. in Visual
>>>> Studio, right-click on test and rebuild), then the CLAPACK tarball get
>>>> extracted *again*, and a full rebuild of CLAPACK happens. I'd expect
>>>> that, unless the tarball is changed, a rebuild of the external project
>>>> is a no-op.
>>>>
>>>> Is there a way to achieve my desired behavior?
>>>
>>> Yes, use the correct option. Rebuild means "rebuild this target and all of
>>> it's dependencies". There is a different option, something like "rebuild only
>>> this target". Just use this one.
>>>
>>
>> That may be difficult in practice. I mean I typically have 20 to 40
>> targets in my projects and sometimes I would want them all rebuilt.
>> However I there is a batch build option in Visual Studio that can be
>> used for that. In this case you check which targets you want built so
>> you can click select all and then uncheck the external project.
>>
>> John
>> --
>>
>> 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
>>
>


More information about the CMake mailing list