[CMake] How do I create a dependency to copy (touched) resource files when building an executable?

Petr Kmoch petr.kmoch at gmail.com
Mon Jun 30 10:28:47 EDT 2014


The reasoning is this: when a target is about to be built, it checks its
dependencies and if any are out of date (or don't exist), it triggers their
building. The binary-dir file is built by the custom command. So when the
custom target is built, it will check its dependency (the binary-dir file)
and trigger a run of the custom command which is registered to OUTPUT that
file.

Petr


On Mon, Jun 30, 2014 at 4:25 PM, Eric Wing <ewmailing at gmail.com> wrote:

> Okay, I switched just the add_custom_target DEPENDS to the binary
> directory (but left the add_custom_command alone). That seems to be
> doing what I need. I think I'm still not fully understanding the
> reasoning behind it, but problem solved I guess.
>
> Thanks,
> Eric
>
>
> On 6/30/14, Eric Wing <ewmailing at gmail.com> wrote:
> > Thanks for the reply. So the usage case is that people are going to be
> > modifying the resources in the source directory. (These changes have
> > to be checked into revision control.) So I'm having trouble seeing how
> > depending on the binary directory is going to work. (The reason I must
> > copy the resources to the binary directory is it is impossible to
> > launch the application through the debugger or otherwise.)
> >
> > Thanks,
> > Eric
> >
> >
> > On 6/30/14, Petr Kmoch <petr.kmoch at gmail.com> wrote:
> >> Hi Eric.
> >>
> >> It seems to me that you're copying from source dir to binary dir, but
> all
> >> dependencies are on the source dir file only. Therefore, there is
> nothing
> >> to trigger the generation of the binary-dir file. Perhaps you wanted
> >> 'fooresources' to depend on the binary-dir file instead?
> >>
> >> Petr
> >>
> >>
> >> On Mon, Jun 30, 2014 at 3:20 PM, Eric Wing <ewmailing at gmail.com> wrote:
> >>
> >>> I need to copy resource files from the source directory to the binary
> >>> directory with the creation of my executable. I want CMake's
> >>> dependency tracking to handle (re)copying these files whenever the
> >>> source has been touched.
> >>>
> >>> Looking at other similar questions like:
> >>>
> >>>
> http://stackoverflow.com/questions/17018477/cmake-adding-custom-resources-to-build-directory
> >>> and the CMake FAQ: How can I add a dependency to a source file which
> >>> is generated in a subdirectory?
> >>> http://www.cmake.org/Wiki/CMake_FAQ
> >>>
> >>> I expected the following (simplified) code to work, but it doesn't. I
> >>> see the add_custom_target processed in the make chain, but the
> >>> add_custom_command never triggers.
> >>>
> >>>
> >>>
> >>> project(foo)
> >>>
> >>> cmake_minimum_required(VERSION 2.8)
> >>>
> >>> add_executable(fooexe
> >>>         ${CMAKE_SOURCE_DIR}/foo.c
> >>>         ${CMAKE_SOURCE_DIR}/asset1.lua
> >>> #       ${CMAKE_SOURCE_DIR}/subdir/subasset1.lua
> >>> )
> >>>
> >>> add_custom_command(
> >>>         OUTPUT "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INT}/asset1.lua"
> >>>         COMMAND ${CMAKE_COMMAND} -E copy_if_different
> >>> "${CMAKE_SOURCE_DIR}/asset1.lua"
> >>> "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INT}/"
> >>>         DEPENDS "${CMAKE_SOURCE_DIR}/asset1.lua"
> >>>         COMMENT "Copying asset1.lua"
> >>> )
> >>>
> >>> # files are only copied if a target depends on them
> >>> add_custom_target(fooresources ALL DEPENDS
> >>> "${CMAKE_SOURCE_DIR}/asset1.lua"
> >>>         COMMENT "fooresources custom target"
> >>>         )
> >>> ADD_DEPENDENCIES(fooexe fooresources)
> >>>
> >>>
> >>>
> >>> Would somebody explain to me the correct way to handle this?
> >>>
> >>>
> >>> Thanks,
> >>> Eric
> >>> --
> >>>
> >>> 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://public.kitware.com/mailman/listinfo/cmake
> >>>
> >>
> >
> >
> > --
> > Beginning iPhone Games Development
> > http://playcontrol.net/iphonegamebook/
> >
>
>
> --
> Beginning iPhone Games Development
> http://playcontrol.net/iphonegamebook/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20140630/f948875b/attachment.html>


More information about the CMake mailing list