[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