[CMake] problem with add_custom command

Brian Davis bitminer at gmail.com
Tue Nov 24 23:07:21 EST 2009


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20091124/df415b2b/attachment.htm>


More information about the CMake mailing list