On 04/14/2011 12:44 PM, J.S. van Bethlehem wrote:
> Dear users,
> 
> As a new user CMake I've come across some things I don't fully 
> understand yet. Here is such a thing:
> when I build documentation, I want to run some files from a  'demo' 
> subdirectory and create output - suppose the (binary) file is called 
> 'func1_demo', then in my old Makefiles I used to do:
>  ./func1_demo >& func1_demo.out
>  I implemented this in CMake using a special 'RunCommand.cmake' script 
> that does:
>    execute_process(COMMAND ${dbin} OUTPUT_FILE ${dbin_out} ERROR_FILE 
> ${dbin_out})
> and the CMakeLists.txt file that creates the demos, has
>   ${CMAKE_COMMAND} -Ddbin="./${demo_name}" -Ddbin_out="${demo_name}.out" 
> -P RunCommand.cmake
> as the COMMAND part of an add_custom_command. It seems a bit contrived, 
> having to pass these variables through the command line to a separate 
> file. Is there a better way to do this?

You might incorporate the variables in your script; e.g., provide
a RunCommand.cmake.in template which contains the following lines

EXECUTE_PROCESS(
    COMMAND @dbin@
    OUTPUT_FILE @dbin_out@
    ERROR_FILE @dbin_out@
)

and use CONFIGURE_FILE(RunCommand.cmake.in RunCommand.cmake @ONLY) to
generate the actual script to be used. However, the "variables" won't
be variable anymore, and the script will be useful for one case only.

Alternatively, you might rely on environment variables in your script

EXECUTE_PROCESS(
    COMMAND $ENV{dbin}
    OUTPUT_FILE $ENV{dbin_out}
    ERROR_FILE $ENV{dbin_out}
)

but these must be defined when the custom command is run. In the end,
your initial approach with -Dvar=val is reliable and flexible and to
be preferred, IMO, although it's possibly not the most aesthetic one.

BTW, does a direct approach like

ADD_CUSTOM_COMMAND(OUTPUT... COMMAND ${demo_name} >& ${demo_name}.out)

work for you? If so, note that it's not really portable due to the ">&".

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