[CMake] recognizing shell in use

Ajay Panyala ajay at csc.lsu.edu
Tue Mar 6 13:22:15 EST 2012


add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/test.class
 COMMAND ${JAVAC_COMPILER} -d ${PROJECT_BINARY_DIR}
    ${PROJECT_BINARY_DIR}/test.java
 DEPENDS ${PROJECT_BINARY_DIR}/test.java
  COMMENT "Compiling test.java"
 VERBATIM)

add_custom_target(compile-test-java
 DEPENDS ${PROJECT_BINARY_DIR}/test.class)

I tried this. It builds as expected initially. But when I change test.java
and run
make, it is not re-compiled.

It looks like test.java is a generated file, so depending on how you
generate it, you also need to set the GENERATED source file property to
TRUE in order for this to work.

test.java is not a generated file. I am modifying it manually and trying to
build.

Thanks
Ajay

On Tue, Mar 6, 2012 at 7:43 AM, Michael Wild <themiwi at gmail.com> wrote:

> That's the wrong way to go about things. Rather than putting the COMMAND
> in the custom target, put it in a add_custom_command() call and make the
> custom target DEPENDS on it. Then you let the build system handle the
> dependencies. E.g. like this:
>
> find_program(JAVAC_COMPILER javac PATH_SUFFIXES bin ENV JAVA_HOME)
>
> add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/test.class
>  COMMAND ${JAVAC_COMPILER} -d ${PROJECT_BINARY_DIR}
>     ${PROJECT_BINARY_DIR}/test.java
>  DEPENDS ${PROJECT_BINARY_DIR}/test.java
>   COMMENT "Compiling test.java"
>  VERBATIM)
>
> add_custom_target(compile-test-java
>  DEPENDS ${PROJECT_BINARY_DIR}/test.class)
>
>
> It looks like test.java is a generated file, so depending on how you
> generate it, you also need to set the GENERATED source file property to
> TRUE in order for this to work.
>
> HTH
>
> Michael
>
> On 03/06/2012 04:27 PM, Ajay Panyala wrote:
> > That is because I have a custom target like
> >
> > ADD_CUSTOM_TARGET(testc ALL
> >   COMMAND java ${PROJECT_BINARY_DIR}/test.java
> >   DEPENDS ${PROJECT_BINARY_DIR}/test.java
> > )
> >
> > I want to build test.java only if it has been changed.
> >
> > Since custom targets are always out-of-date, I wanted to have the
> > command inside the custom target like
> >
> > COMMAND if( test.java has not been modified ) then java build/test.java;
> fi
> >
> > The syntax of *if* differs between different shells. So I wanted to
> > check for
> > the shell first and use the appropriate IF syntax.
> >
> >
> > Thanks
> > Ajay
> >
> >
> > On Mon, Mar 5, 2012 at 11:03 PM, Eric Noulard <eric.noulard at gmail.com
> > <mailto:eric.noulard at gmail.com>> wrote:
> >
> >     2012/3/6 Ajay Panyala <ajay at csc.lsu.edu <mailto:ajay at csc.lsu.edu>>:
> >     > Hello,
> >     >
> >     > Is there anyway that cmake could figure out the shell (bash,csh,..)
> >     > that is being use when cmake is invoked on the command line ?
> >
> >     May be you can check $ENV{SHELL} ?
> >     Why would you like to do that?
> >
> >     Usually when using CMake one tries to avoid shell/command interpreter
> >     dependency??
> >     --
> >     Erk
> >     Le gouvernement représentatif n'est pas la démocratie --
> >     http://www.le-message.org
> >
> >
> >
> >
> >
> >
> >
> > --
> >
> > 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
>
> --
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120306/3ee68fa2/attachment.htm>


More information about the CMake mailing list