[CMake] problem with add_custom command
Michael Wild
themiwi at gmail.com
Wed Mar 25 03:59:45 EDT 2009
On 25. Mar, 2009, at 7:51, ankit jain wrote:
> 2009/3/25 Alexander Neundorf <a.neundorf-work at gmx.net>
>
>> On Tuesday 24 March 2009, ankit jain wrote:
>>> hi all,
>>>
>>> Iam doing the following through my cmakelist.txt
>>>
>>> add_custom_target(mytarget)
>>> add_custom_command(TARGET mytarget POST_BUILD
>>> COMMAND ${CMAKE_COMMAND} -E tar xvf ${CMAKE_CURRENT_SOURCE_DIR}/
>>> t1.tar)
>>> this cmakelist is written in subfolder of a mainfolder..
>>>
>>> But the problem is that files are not extracted and it is not
>>> showing any
>>> error.
>>
>> Hm, I never tried to use add_custom_command(TARGET ... ) with a
>> custom
>> target.
>> So if you do "make mytarget" then tar is not executed ?
>> Did you try to do this directly using add_custom_target(), i.e. put
>> the
>> tar-command in the add_custom_target() ?
>>
>> Alex
>
>
> I followed this approach becoz add_cutom_command with outptu option
> deos not
> seems to work but actually i want to do it by that way only because
> from the
> main tree i issue make only so thats why that target will not build.
>
> Do anyone know what is the problem if i do like this and then run
> make:
>
> add_custom_command(OUTPUT {TARDIR}/t2 {TARDIR}/t3
> {TARDIR}/t1
> COMMAND tar ARGS -xvf $(TARDIR)/mytar.tar
-------------------------^------^
those should probably be { and } instead of ( and )...
>
> WORKING_DIRECTORY ${TARDIR})
>
>
>> Here i want to extract the files in the same folder where tar
>> exists..
>
> the extraction will actually should give these t1, t2, t3 folder
> which i
> mention in output ..
>
> Is iam doing something wrong....
>
> Ankit
>
>
What I usually do is this:
add_custom_command( OUTPUT ${TARDIR}/t1
COMMAND ${CMAKE_COMMAND} -E tar xvf ${TARDIR}/mytar.tar
WORKING_DIRECTORY ${TARDIR}
COMMENT "Extracting ${TARDIR}/mytar.tar"
VERBATIM
)
add_custom_target( extract_mytar
DEPENDS ${TARDIR}/t1
)
This tells CMake how to obtain the file ${TARDIR}/t1 by unpacking
mytar.tar. Then it adds a target which depends on that file. You then
can have other targets depend on that by using add_dependencies.
Another thing: Please make sure that TARDIR is in the build tree (i.e.
somewhere below CMAKE_BINARY_DIR). Extracting tar-balls in the source
tree is a pretty bad idea.
HTH
Michael
More information about the CMake
mailing list