[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