[CMake] recognizing shell in use

David Cole david.cole at kitware.com
Tue Mar 6 14:44:20 EST 2012


On Tue, Mar 6, 2012 at 1:22 PM, Ajay Panyala <ajay at csc.lsu.edu> wrote:
> 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
>
>
>
>
>
>
> --
>
> 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


Is CMAKE_CURRENT_BINARY_DIR the same as PROJECT_BINARY_DIR?

You have one listed as the OUTPUT file and the other listed as the
location of the DEPENDS file...


More information about the CMake mailing list