[CMake] Poor performance of copy_if_different

Clinton Stimpson clinton at elemtech.com
Tue Nov 6 12:11:37 EST 2012


On Tuesday, November 06, 2012 11:06:45 AM Robert Dailey wrote:
> I use ${CMAKE_COMMAND} -E copy_if_different to copy DLL files to my
> binary output directory. The custom target runs this command about
> 50-100 times (for that many files).
> 
> I notice that when all files are already copied, the commands still
> run extremely slowly. It takes just as long to copy all the files as
> it does to copy none of them.
> 
> I used the Sysinternals tool called Process Monitor to see what CMake
> is doing as it runs copy_if_different. It's opening the full file and
> seems to be comparing actual contents instead of something simple,
> such as timestamp.
> 
> I do not need such a thorough check, I simply want the check to see
> which timestamp is higher and copy if the source is newer than the
> target.
> 
> Any reason why copy_if_different is so slow? Is my assumption correct?
> How can I make it faster?

How about using plain "cmake -E copy ..." and rely on the timestamp check done 
by a custom command (add_custom_command()).
You need to make sure the input/ouput parts of the custom command are set 
correctly so it can do a timestamp check.

-- 
Clinton Stimpson
Elemental Technologies, Inc
Computational Simulation Software, LLC
www.csimsoft.com


More information about the CMake mailing list