[CMake] problem with add_custom command

Michael Wild themiwi at gmail.com
Wed Nov 25 06:59:47 EST 2009


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