[CMake] INSTALL CODE Error Results and Termination
David Hauck
davidh at netacquire.com
Wed Nov 13 14:42:04 EST 2013
Hi Jean-christophe,
On chris.fillionr at kitware.com], Jean-Christophe Fillion-Robin wrote:
> Hi David,
>
> You need to escape the "$" sign otherwise the "_err", "_out" and "_res"
> variables are resolved to an empty string.
>
> Here is an example of what you could do:
> -------------8<-----------8<----------
> cmake_minimum_required(VERSION 2.8.9)
>
> install(CODE "execute_process (
> COMMAND ${CMAKE_COMMAND} -E echo \"Hello\"
> OUTPUT_VARIABLE _out
> ERROR_VARIABLE _err
> RESULT_VARIABLE _res
> )"
> )
> install(CODE "message( STATUS \"out: \${_out}, err: \${_err}, res:
> \${_res}...\")") -------------8<-----------8<----------
Aha! This was probably obvious to you and Kornel, but it "escaped" me ;). Brilliant, this is working fine now.
Thanks to both of you for your help,
-David
> Hth
> Jc
>
> On Wed, Nov 13, 2013 at 2:29 PM, David Hauck <davidh at netacquire.com>
> wrote:
> Hi Kornel,
>
> On Wednesday, November 13, 2013 11:08 AM, cmake- bounces at cmake.org
> wrote: > Am Mittwoch, 13. November 2013 um 18:41:03, schrieb David
> Hauck > <davidh at netacquire.com> >> Hi Kornel, >> >> On Wednesday,
> November 13, 2013 10:26 AM, cmake- > bounces at cmake.org wrote: >>> Am
> Mittwoch, 13. November 2013 um 18:12:26, schrieb David Hauck >>>
> <davidh at netacquire.com> >>>> Hello, >>>> >>>> I've been using several
> "install (CODE "EXECUTE_PROCESS ...")" >>>> constructs >>> in my
> top-level CMakeLists.txt file. However, I've been unable to >>>
> capture/operate on any exit status of the embedded command. >>>
> Unfortunately, documentation/searches haven't turned up any useful >>>
> pointers. The closest I've come is a pointer in the following thread:
> >>>> http://www.cmake.org/pipermail/cmake/2011- July/045475.html
> However, >>>> I've not been able to sufficiently read between the lines
> to get >>>> this working. >>>> >>>> Does anyone have any thoughts on
> how to get something like the >>>> following working: >>>> >>>>
> install (CODE "EXECUTE_PROCESS ( >>>> COMMAND ant ... >>>>
> WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/java >>>> ERROR_VARIABLE
> _err >>> >>> Didn't you mean 'RESULT_VARIABLE' here? >> >> No, I
> really do mean ERROR_VARIABLE (unless, of course, this variable >> does
> > not include the non-zero exit status of the EXECUTE_PROCESS
> command?). > > If you run 'cmake --help-command execute_process', you
> see: ... If > RESULT_VARIABLE is given the variable will be set to
> contain the > result of running the processes. This will be an integer
> return code > from the last child or a string describing an error
> condition. ... So, > if this is not "0", then you have an error
> condition.
>
> Yes, I see this. I also assumed that the ERROR_VARIABLE would be
> returning non-zero text as well in this case. I will change to using
> RESULT_VARIABLE, but, in both cases, it seems that I'm referencing the
> variable incorrectly (either syntactically or in the incorrect
> context) since this/these is/are always <empty>.
>
> >> BTW, I'm still curious about the (dual 'code') construct generally.
> >> Specifically, if I do the following I never see the fatal error >>
> message (so I'm wondering if there's still something wrong regarding >>
> the scoping of the message command)? >> >> install (CODE
> "EXECUTE_PROCESS ( >> COMMAND ant ... >> WORKING_DIRECTORY
> ${PROJECT_SOURCE_DIR}/java >> ERROR_VARIABLE _err >> ) >>
> MESSAGE( FATAL_ERROR \"err: ${_err}\") > > Never did this. When do you
> want to see the message?
>
> Ideally, I want to be able to test for the result of this variable
> (either ERROR_VARIABLE or RESULT_VARIABLE) after the execute_process
> command completes (during 'make install') to determine its result and
> to terminate (with error message) when the command fails.
>
> Thanks,
> -David
>
> > As I understand your code, only in call of cmake, e.g. at
> configuration time.
> >
> > Kornel
More information about the CMake
mailing list