[CMake] problem with add_custom command
Michael Wild
themiwi at gmail.com
Wed Nov 25 09:01:24 EST 2009
If you'd read on, you would see that I first CREATE a tar file, then
EXTRACT it and then show that the contents have been restored.
Michael
On 25. Nov, 2009, at 14:56 , Brian J. Davis wrote:
>
> In your example you use "cvf". This creates a tar file which is not
> what I want to do. I want to extract a tar file (source) and then
> get to configuring the build for it. What I need is "xvf" ...
> extract a tar file.
>
> http://amath.colorado.edu/computing/software/man/tar.html
> • Extract files from an archive (recover all the files+directories
> from the tar file)
> tar xvf archivefile.tar
>
> Brian.
>
> Michael Wild wrote:
>> Works fine for me on my Mac. Can't help with Windows 7 (or rather,
>> 6.1, but then the marketing guys at MS probably figured to round
>> that up to 7... ;-)) as I don't have access to it.
>>
>> $ mkdir test
>> $ echo "Hello World" > test/hello.txt
>> $ cmake -E tar cvf test.tar test
>> drwxr-xr-x mwild staff 0 Nov 25 12:58 2009 test/
>> -rw-r--r-- mwild staff 12 Nov 25 12:58 2009 test/
>> hello.txt
>> $ rm -rf test
>> $ cmake -E tar xvf test.tar
>> drwxr-xr-x mwild staff 0 Nov 25 12:58 2009 test/
>> -rw-r--r-- mwild staff 12 Nov 25 12:58 2009 test/
>> hello.txt
>> $ cat test/hello.txt
>> Hello World
>>
>> Michael
>>
>>
>> On 25. Nov, 2009, at 5:07 , Brian Davis wrote:
>>
>>> So I found this thread below and tried the command at the promp
>>> (Win7):
>>>
>>> cmake -E tar xvf
>>>
>>> CMake Error: Problem with tar_open(): No such file or directory
>>> CMake Error: Problem extracting tar: ${TARDIR}/mytar.tar
>>>
>>> cmake -E tar xvf openssl-0.9.8a.tar
>>>
>>> CMake Error: Problem with tar_open(): No such file or directory
>>> CMake Error: Problem extracting tar: openssl-0.9.8a.tar
>>>
>>> so I do a:
>>>
>>> CMake Error: cmake version 2.8.0
>>> Usage: cmake -E [command] [arguments ...]
>>> Available commands:
>>> chdir dir cmd [args]... - run command in a given directory
>>> rename oldname newname - rename a file or directory (on one
>>> volume)
>>> copy file destination - copy file to destination (either file
>>> or
>>> directory)
>>> copy_if_different in-file out-file - copy file if input has
>>> changed
>>> copy_directory source destination - copy directory 'source'
>>> content to
>>> directory 'destination'
>>> compare_files file1 file2 - check if file1 is same as file2
>>> echo [string]... - displays arguments as text
>>> echo_append [string]... - displays arguments as text but no new
>>> line
>>> environment - display the current enviroment
>>> make_directory dir - create a directory
>>> md5sum file1 [...] - compute md5sum of files
>>> remove_directory dir - remove a directory and its contents
>>> remove [-f] file1 file2 ... - remove the file(s), use -f to force
>>> it
>>> tar [cxt][vfz] file.tar file/dir1 file/dir2 ... - create a tar
>>> archive
>>> time command [args] ... - run command and return elapsed time
>>> touch file - touch a file.
>>> touch_nocreate file - touch a file but do not create it.
>>> build build_dir - build the project in build_dir.
>>> write_regv key value - write registry value
>>> delete_regv key - delete registry value
>>> comspec - on windows 9x use this for RunCommand
>>>
>>> And I pay particular attention to
>>>
>>> tar [cxt][vfz] file.tar file/dir1 file/dir2 ... - create a tar
>>> archive
>>>
>>> and notice no xvf option.
>>>
>>> Is tar xvf implemnted?
>>>
>>> If so why tar and no untar? Curious.
>>>
>>> Brian
>>>
>>>
>>> On 25. Mar, 2009, at 10:28, ankit jain wrote:
>>>
>>> 2009/3/25 Michael Wild
>>> <themiwi-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org><themiwi-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org
>>> >
>>>
>>>
>>> On 25. Mar, 2009, at 9:33, ankit jain wrote:
>>>
>>> 2009/3/25 Michael Wild
>>> <themiwi-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org><themiwi-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org
>>> >
>>>
>>>
>>>
>>> [...]
>>>
>>>
>>> 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.
>>>
>>>
>>>
>>> Thanks for your suggestions it works but the problem is that iam
>>> making a
>>> library which requires some source files which will come after
>>> extracting
>>> it
>>> from tar.
>>>
>>> In that making an custom target for it and then add_dependencies
>>> to that
>>> library to this custom build target does not solve the purpose.
>>>
>>> then how to include those files which is required by the library
>>> which
>>> came
>>> from tar.
>>>
>>>
>>>
>>> if you add all the files from the tar archive to the OUTPUT list of
>>> add_custom_command, CMake should automatically set the GENERATED
>>> property of
>>>
>>> those file to TRUE. If you don't want to do that, you still can
>>> set that
>>> property manually, using e.g.:
>>>
>>> set_source_files_properties( ${TARDIR}/t1 ${TARDIR}/t2 PROPERTIES
>>> GENERATED
>>> TRUE )
>>>
>>> you then can use those files in a normal add_library or
>>> add_executable
>>> command. if you use the first approach (listing all files in the
>>> OUTPUT
>>> list), you don't even need the custom target, since CMake then
>>> will know how
>>>
>>> to "create" these files (by invoking the custom command).
>>>
>>>
>>> Is there any way by which we just give the name of folder where
>>> files has
>>> extracted and add_library command will take it by some means it is
>>> becoz if
>>> we dont know what files will be genrated inside that folder or if
>>> there are
>>> large no.of files then listing them in OUTPUT is really cumbersome..
>>>
>>>
>>> ankit
>>>
>>>
>>> you could use
>>>
>>> execute_process(
>>> COMMAND ${CMAKE_COMMAND} -E tar tf ${TARDIR}/mytar.tar
>>> OUTPUT_VARIABLE tar_files
>>> )
>>>
>>> to get a list of files contained in the tar file. However, I don't
>>> recommend
>>> this. It is much safer to really write the files out. If it hurts
>>> your eyes
>>> to put it in the CMakeLists.txt file, you can put the list in e.g.
>>> a file
>>> called files.cmake and INCLUDE that one from your CMakeLists.txt.
>>>
>>> DON'T use file(GLOB ...) or similar. That's a pretty bad idea...
>>>
>>> Michael
>>> _______________________________________________
>>> 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
>>>
>>>
>>> --
>>> Brian J. Davis
>>> _______________________________________________
>>> 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
>>
>
More information about the CMake
mailing list