On 10/27/2010 08:02 PM, Arne Pagel wrote:
> Hello,
> 
> I need a custom command in my build process.
> The tool that I am using has a small problem, I have to insert a line of code 
> in
> the output file manually:
> #include <gtk/gtk.h>
> 
> I tried this with echo and output redirection:
> echo "#include <gtk/gtk.h>" > images.c
> 
> The tool, gdk-pixbuf-csource, is not able to generate a file, therefor its 
> output has to be 
> redirected to the file too:
> gdk-pixbuf-csource --raw pix1 ./images/pix1.png >> images.c
> 
> I can get it work one linux and win32 system, but with different syntax:
> 
> This works on a win32 System:
> 
> ADD_CUSTOM_COMMAND (OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/images.c
>                   COMMAND ${CMAKE_COMMAND} -E echo "\#include <gtk/gtk.h>" > 
> images.c
>                      COMMAND gdk-pixbuf-csource --raw pix1 ./images/pix1.png 
> >> images.c
>                      DEPENDS ./images/pix1.png )
> 
> 
> This works on a linux System:
> 
> ADD_CUSTOM_COMMAND (OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/images.c
>                      COMMAND echo "\"""#include""<gtk/gtk.h>" "\"" > images.c
>                      COMMAND gdk-pixbuf-csource --raw pix1 ./images/pix1.png 
> >> images.c
>                      DEPENDS ./images/pix1.png )
> 
> I tried many variations of above examples, but I can't get running on both 
> systems with the same 
> syntax, any idea what might be right?
> 
> Perhaps there is another way then "echo" to write something in a file, I 
> tried FILE(WRITE) but I 
> failed with this.
> 
> I could make a file with the include line already inserted and than try to 
> copy it, I saw some 
> commands for that, is this the better Way? Actually I don't prefer this, I 
> don't want to have a 
> strange single-line source file in the project.

Possibly, you can use a CMake script with EXECUTE_PROCESS() and FILE():

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(PIXBUF NONE)
FILE(WRITE ${CMAKE_BINARY_DIR}/pixbuf.cmake "
EXECUTE_PROCESS(COMMAND gdk-pixbuf-csource --raw \${SRC}
    OUTPUT_VARIABLE PIXBUF)
FILE(WRITE \${DST} \"#include <gtk/gtk.h>\n\")
FILE(APPEND \${DST} \${PIXBUF})
")
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_BINARY_DIR}/test.c
    COMMAND ${CMAKE_COMMAND}
                -DSRC=${CMAKE_SOURCE_DIR}/test.png
                -DDST=${CMAKE_BINARY_DIR}/test.c
                -P ${CMAKE_BINARY_DIR}/pixbuf.cmake
    DEPENDS ${CMAKE_SOURCE_DIR}/test.png)
ADD_CUSTOM_TARGET(pixbuf DEPENDS ${CMAKE_BINARY_DIR}/test.c)

The pixbuf.cmake script gathers the output of gdk-pixbuf-csource and
appends it to the resulting file which already contains the include
line. This approach should work in a platform-independent manner.

Regards,

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

Reply via email to