[CMake] delayed target

Michael Hertling mhertling at online.de
Wed Feb 22 12:14:16 EST 2012


On 02/22/2012 05:02 PM, Andrea Crotti wrote:
> Again I'm having some troubles with the different building stages:
> 
> I would like to have a target that simply unzips all the files contained 
> in a directory,
> which can be found with a simple globbing.
> 
>   add_custom_target(unzip_all_eggs
>     file(GLOB eggs RELATIVE ${EGG_BUILD_DIRECTORY}/*egg)
>     COMMAND ${PYTHON_EXECUTABLE} ${UNZIP_SCRIPT} ${egg}
>     )
> 
> 
> The problem is that [...]

...FILE(GLOB ...) is a CMake command executed by CMake, whereas the
custom target's COMMANDs are executed by the build tool at build
time, so this approach fails from the first.

> A possible solution is to make my UNZIP_SCRIPT smarter and just do the 
> globbing
> itself, is there any other more CMake-like solution?

ADD_CUSTOM_TARGET(unzip_all_eggs
    ${CMAKE_COMMAND}
        -DEGGDIR=${EGG_BUILD_DIRECTORY}
        -P ${CMAKE_SOURCE_DIR}/unzip_all_eggs.cmake)

# ${CMAKE_SOURCE_DIR}/unzip_all_eggs.cmake:
SET(PYTHON_EXECUTABLE ...)
SET(UNZIP_SCRIPT ...)
FILE(GLOB eggs RELATIVE ${EGGDIR}/*egg)
EXECUTE_PROCESS(
    COMMAND ${PYTHON_EXECUTABLE} ${UNZIP_SCRIPT} ${eggs}
    WORKING_DIRECTORY ...
)

You might want to provide an unzip_all_eggs.cmake.in template including

SET(PYTHON_EXECUTABLE @PYTHON_EXECUTABLE@)
SET(UNZIP_SCRIPT @UNZIP_SCRIPT@)

use CONFIGURE_FILE(unzip_all_eggs.cmake.in unzip_all_eggs.cmake @ONLY)
to generate the actual unzip_all_eggs.cmake after searching Python and
your script, and specify -P ${CMAKE_BINARY_DIR}/unzip_all_eggs.cmake.

Regards,

Michael


More information about the CMake mailing list