[CMake] Is CMake powerful enough?
    Eric Noulard 
    eric.noulard at gmail.com
       
    Fri Jun  8 09:42:33 EDT 2007
    
    
  
Hi Oliver,
I think you already get a full set of valuable answer to your question.
And I would invite you as Bill said to prototype CMake usage
on real life subset of your project.
I would add some comments about the following:
2007/6/7, Oliver Kullmann <O.Kullmann at swansea.ac.uk>:
> It appears now that the computational power of cmake is rather restricted?
> There seem to be no functions?? (While we had hoped that there are many
> more than in make?) Even just a shell-call seems to need to be programmed
> by ourselves?? (I can't believe that, but couldn't find it.)
I think that the shell running feature of some make avatar
like GNU Make is just an escape door from Makefile language
itself.
You got just the same feature in CMake EXECUTE_PROCESS and/or
ADD_CUSTOM_COMMAND depending if you want CMake-time
or build-time execution.
You may write your "escape code" in whatever
modern and powerful scripting language you need like python, ruby etc...
if you want to make it appear "like" a CMake ability to execute
say, python code, you may write a CMake MACRO like
MACRO(PYTHON_EXECUTE CODE RESULT ERROR)
   SET(TMPFILE "/tmp/python_execute.py")
   FILE(WRITE ${TMPFILE} ${CODE})
   EXECUTE_PROCESS(COMMAND /usr/sfw/bin/python ${TMPFILE}
                TIMEOUT 10
                RESULT_VARIABLE PYTHON_RESULT
                OUTPUT_VARIABLE ${RESULT}
                ERROR_VARIABLE  ${ERROR}
                OUTPUT_STRIP_TRAILING_WHITESPACE)
   FILE(REMOVE ${TMPFILE})
ENDMACRO(PYTHON_EXECUTE)
and then use it like this:
PYTHON_EXECUTE("import time\nprint 'todays year is:'+
time.strftime('%Y',time.localtime())" MYVAR ERROR)
MESSAGE("MYVAR = ${MYVAR}")
MESSAGE("ERROR = ${ERROR}")
I think, that with some amount of time (not so much) for defining
your own WHATEVER_EXECUTE CMake MACROs
you'll get the power of what you add before
with shell running in Makefile.
You may try my example with the attached file
and run
cmake -P python_execute.cmake
This example is a toy example, I am sure you
may accomplish something far better and useful.
-- 
Erk
-------------- next part --------------
A non-text attachment was scrubbed...
Name: python_execute.cmake
Type: application/octet-stream
Size: 521 bytes
Desc: not available
Url : http://public.kitware.com/pipermail/cmake/attachments/20070608/9866159d/python_execute-0001.obj
    
    
More information about the CMake
mailing list