[CMake] Problems using add_custom_command and perl
David Cole
david.cole at kitware.com
Thu Apr 21 10:25:09 EDT 2011
On Thu, Apr 21, 2011 at 9:48 AM, Maxime Lecourt <maxime.lecourt at gmail.com>wrote:
> Hi,
>
> I'm currently trying to use add_custom_command, but I do not get any output
> (it's working fine in other projects, with Bison and Flex).
>
> Basically, I have a CMakeLists.txt file with
>
> include(CMakeCallPerl.cmake)
> PERL_SCRIPT("${GLISS_PATH}/nmp2nml.pl" "ppc.nmp")
>
>
> And in my CMakeCallPerl.cmake file :
>
> find_program(PERL perl)
> IF(PERL)
> MACRO(PERL_SCRIPT SCRIPT FILENAME)
> GET_FILENAME_COMPONENT(PATH "${FILENAME}" PATH)
> GET_FILENAME_COMPONENT(PREFIX "${FILENAME}" NAME_WE)
> SET(OUTFILE "${PREFIX}.nml")
> MESSAGE(STATUS "${PERL} ${SCRIPT} ${FILENAME} ${OUTFILE}")
> ADD_CUSTOM_COMMAND(
> OUTPUT "${OUTFILE}"
> COMMAND "${PERL}"
> "${SCRIPT}"
> "${FILENAME}"
> "${OUTFILE}"
> )
> SET_SOURCE_FILES_PROPERTIES("${OUTFILE}" PROPERTIES GENERATED TRUE)
> ENDMACRO(PERL_SCRIPT)
> ENDIF(PERL)
>
> What am I doing wrong ?
>
> Copy/Pasting the MESSAGE output in command line, everything works fine, but
> not when compiling after generating with CMake.
> (it looks like this :
> C:/Win16App/rational/TestRealTime/bin/intel/win32/perl.exe
> D:/workspace/ppc/../gliss/nmp2nml.pl ppc.nmp ppc.nml)
> There is also no mention for Perl in any CMake generated file.
> Using Windows XP and MinGW
>
> Regards,
>
> Maxime
>
> _______________________________________________
> 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
>
The output of the custom command needs to be used by something in order for
a build to trigger it...
After calling your macro, you can depend on the output of it with a custom
target if there is no other dependency on it:
add_custom_target(run_perl_scripts ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/file1.nml
${CMAKE_CURRENT_BINARY_DIR}/file2.nml ...
)
Then a "make" will trigger running perl.
You should also probably add:
DEPENDS ${FILENAME} ${SCRIPT}
to the custom command so that it re-runs if the input or the script
changes...
HTH,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110421/d3eaf3e5/attachment.htm>
More information about the CMake
mailing list