[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