[CMake] POST_BUILD in a different directory

Judicaël Bedouet j.bedouet at infonie.fr
Fri May 9 11:58:04 EDT 2008


Hello,

Thanks for advice.

I have finally added two commands.

First depends on library
     ADD_CUSTOM_COMMAND (OUTPUT ${generated_file}
       COMMAND ${doc_command}
       DEPENDS  ${target}
     )

Second depends on a file which is generated by doc_command.
     ADD_CUSTOM_TARGET (doc ALL DEPENDS ${generated_file})

Documentation is only regenerated when the library is rebuilt but I
would prefer to use the POST_BUILD option.

Thanks again,

J. Bedouet


On Mon, Apr 28, 2008 at 5:39 PM, Andreas Pokorny
<andreas.pokorny at gmail.com> wrote:
> Hello,
> I have the same requirement. I would like to attach copy commands to targets
> built in different directories. I want to copy dlls/pdb/so -files into
> other directories
> that contain test cases which are supposed to use the libraries.
>
> I have a "clean" solution that only works in NMake and gnumake. The macro
> that creates the test cases, creates a new target and attaches all
> copy commands
> to that target, by specifying a dependencies two the original library,
> the copy command
> will be executed everytime the library changes.
>
> ADD_CUSTOM_TARGET(Dummy ALL)
>
> ADD_CUSTOM_COMMAND(TARGET Dummy
>                        POST_BUILD
>                        COMMAND ${CMAKE_COMMAND} -E copy
>                        ${__COPY_SOURCE_PATH}/${LIBNAME}.dll
>                        ${__COPY_DEST_PATH}
>                        DEPENDS ${__COPY_SOURCE_PATH}/${LIBNAME}.dll
>                        )
>
> The dummy target exists within each cmake project that calls the
> macro. But with
> Visual Studio the project names must be unique. So only the first one
> is loaded :(.
>
> To solve that issue the "dirty" solution ensures that the dummy target
> is created from
> the project name, so the target and project file will be unique.
>
> ADD_CUSTOM_TARGET(${PROJECT_NAME}_Dummy ALL)
> ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME}_Dummy
>                        POST_BUILD
>                        COMMAND ${CMAKE_COMMAND} -E copy
>                        ${__COPY_SOURCE_PATH}/${LIBNAME}.dll
>                        ${__COPY_DEST_PATH}
>                        DEPENDS ${__COPY_SOURCE_PATH}/${LIBNAME}.dll
>                        )
>
>
>
> kind regards
> Andreas
>
> 2008/4/24 Judicaël Bedouet <j.bedouet at infonie.fr>:
>> Hello,
>>
>>  I would like to use the POST_BUILD option of the command
>>  ADD_CUSTOM_COMMAND in a CMakeLists.txt, different from the
>>  CMakeLists.txt which is used to
>>  generate the target. I made this test.
>>
>>
>>  In the top level source directory,
>>
>>  CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
>>
>>  PROJECT (test CXX)
>>
>>  ADD_SUBDIRECTORY (lib1)
>>  ADD_SUBDIRECTORY (lib2)
>>
>>
>>  In the directory lib1/,
>>
>>  ADD_LIBRARY (lib1 lib1.cpp)
>>
>>  ADD_CUSTOM_COMMAND (TARGET lib1 POST_BUILD
>>   COMMAND echo
>>   ARGS "Hello"
>>   COMMENT "echo hello 1"
>>  )
>>
>>
>>  In the directory lib2/,
>>
>>  ADD_CUSTOM_COMMAND (TARGET lib1 POST_BUILD
>>   COMMAND echo
>>   ARGS "Hello"
>>   COMMENT "echo hello 2"
>>  )
>>
>>
>>  The echo command in lib2/ is never executed.
>>
>>  This is a dummy example but in the case of my project, I would like to
>>  generate a library in directory lib\ and documentation in directory
>>  doc\. Documentation must be regenerated only when the library is
>>  rebuilt.
>>
>>  Is there a way to make the option POST_BUILD works in another directory ?
>>
>>  I'm working under Linux with cmake 2.6-0 RC-8.
>>
>>  Thanks,
>>
>>  J. Bedouet
>>  _______________________________________________
>>  CMake mailing list
>>  CMake at cmake.org
>>  http://www.cmake.org/mailman/listinfo/cmake
>>
>


More information about the CMake mailing list