[CMake] why do my targets keep rebuilding?

Pau Garcia i Quiles pgquiles at elpauer.org
Wed Feb 13 17:26:26 EST 2008


Quoting Benjamin Reed <rangerrick at gmail.com>:

> So I'm trying to build some java stuff, and while it all works, it
> appears my custom targets keep rebuilding.  For example, if I run a
> cmake, and then make, it does what I expect (although the percentages
> are off):
>
> ---(snip!)---
> # make
> [  0%] Generating org/opennms/protocols/icmp/AddressMaskReply.class,
[...]
> [133%] Built target jicmp
> ---(snip!)---
>
> ...but if I do a make install, it regenerates the jar file and the .h
> jni file, and then installs.

The problem is you are using ADD_CUSTOM_TARGET for the .jar. Line 112  
in your CMakeLists.txt:

add_custom_target(jicmp.jar ${JAVA_ARCHIVE} -cvf jicmp.jar org DEPENDS  
${JAVA_CLASS_FILES} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

According to the CMake docs, ADD_CUSTOM_TARGET is considered always  
out of date and rebuilt:

$ cmake --help ADD_CUSTOM_TARGET
   ADD_CUSTOM_TARGET
        Add a target with no output so it will always be built.

          ADD_CUSTOM_TARGET(Name [ALL] [command1 [args1...]]
                            [COMMAND command2 [args2...] ...]
                            [DEPENDS depend depend depend ... ]
                            [WORKING_DIRECTORY dir]
                            [COMMENT comment] [VERBATIM])

        Adds a target with the given name that executes the given commands.
        The target has no output file and is ALWAYS CONSIDERED OUT OF DATE
        even if the commands try to create a file with the name of the target.

Use ADD_CUSTOM_COMMAND.

-- 
Pau Garcia i Quiles
http://www.elpauer.org
(Due to my workload, I may need 10 days to answer)



More information about the CMake mailing list