[CMake] Copying files to runtime directory

Jeroen Dierckx jeroen.dierckx at gmail.com
Wed Sep 23 19:02:16 EDT 2009


On Wed, Sep 23, 2009 at 10:29 PM, Michael Jackson <
mike.jackson at bluequartz.net> wrote:

> I just include some CMake code to copy the Qt Dlls from the Qt installation
> directory into the local Debug or Release directories. Kinda clunky but gets
> the job done.
>

We do it in the same way actually, but then a bit automated, by searching
for specific folders in our build environment (e.g. deps/runtime/<package
name>/[shared|debug|release]).

I have a deadline coming up, so I'll have to do some actual results-spawning
work first :-) But next week I am going to try using the install method
described above, because that's easier to maintain, and then the files are
only copied when necessary (that is, when actually debugging a build of a
certain configuration).

Greetz,
JeDi



>
> --
> Mike Jackson <www.bluequartz.net>
>
>
>
> On Sep 23, 2009, at 3:09 PM, Jeroen Dierckx wrote:
>
>  On Wed, Sep 23, 2009 at 9:06 PM, Anatoly Shirokov <shirokov_a at mail.ru>
>> wrote:
>> We use the RUNTIME_OUTPUT_DIRECTORY property to specify runtime location
>>  for each target:
>>
>> set_target_properties(bla-bla-bla
>>   PROPERTIES
>>   RUNTIME_OUTPUT_DIRECTORY
>> ${CMAKE_BINARY_DIR}/Execute/${CMAKE_BUILD_TYPE})
>> )
>> I hope it helps.
>>
>> Thanks, but the problem I was facing was about dlls and other files from
>> external dependencies that need to be copied to the runtime directory.
>>
>>
>> Jeroen Dierckx:
>>
>>>
>>> Hi,
>>>
>>> In Windows, we need to copy a bunch of files (dlls and other runtime
>>> dependencies) to the runtime directory, mostly belonging to external
>>> dependencies. Those files are different for debug and release builds.
>>> So I created a function to do just that. I came across several
>>> problems or limitations in cmake while doing that. Here is how I did
>>> it, and some remarks for each step
>>>
>>> - For a certain external dependency, I look for a specific
>>> platform-dependent directory, with some shared files, and some only
>>> for debug or release builds. I have to exclude certain files and
>>> directories (.svn directories in this case). It would be nice to have
>>> an EXCLUDE parameter for the file(GLOB* functions, like in the install
>>> function. I worked around this by iterating over all the files in the
>>> list and removing them when they match a certain REGEX.
>>>
>>> - I wanted to create post-build command to copy the necessary files
>>> after building, because they are only needed when actually
>>> running/debugging the application. There currently is no way to
>>> generate different custom commands for different configurations. I
>>> could work around this by using some if-tests inside the custom
>>> command itself, but I decided against it because it would be too
>>> Visual Studio-specific.
>>>
>>> - So I copy all files to each build directory (one for each
>>> configuration that is generated, mind that for Visual Studio no build
>>> configuration is chosen at configure time) in cmake. This of course is
>>> not very optimal, as it copies the files for all configurations, also
>>> the ones I will probably never build. Here I used the cmake command
>>> with -E copy_if_different. This works, but spawns a new process for
>>> each file to be copied. I could use configure_file, but that seemed a
>>> bit hacky to me.
>>>
>>> All in all, my method works, but to summarize, the following features
>>> would be a nice addition to cmake:
>>> - an EXCLUDE parameter for the file globbing commands
>>> - configuration-specific custom commands
>>> - a cmake command to copy files (with a parameter to only do it when
>>> the files differ)
>>>
>>> Greetz,
>>> JeDi
>>> _______________________________________________
>>> 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
>>>
>>>
>>>
>>>
>> _______________________________________________
>> 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
>>
>
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090924/c48e3f42/attachment-0001.htm>


More information about the CMake mailing list