[CMake] Bug? additional_clean_files not respected if no target present in directory

Hugo Heden hugoheden at gmail.com
Tue Nov 18 14:36:49 EST 2008


Good day all,

It seems that

   set_directory_propersties( properties additional_clean_files ... )

is not respected if no target present in the directory -- that is
'make clean' will not remove the specified "additional clean file".

Is this possibly a CMake bug, or is it rather a misunderstanding on my part?

$ cmake --version
cmake version 2.6-patch 2

A little test case to illustrate this follows. We have two
CMakeLists.txt-files, one in the root directory and one in a sub
directory.  The former (src/CMakeLists.txt) is not really important,
but included here for completeness. The latter,
src/subdir/CMakeLists.txt, is where the bug appears. There is also a
file that is being installed, src/subdir/hello.txt. Invoking 'make
clean' will not clean that file unless there is an actual target
specified in src/subdir/CMakeLists.txt.

File tree:.

|-- build
|-- install
`-- src
    |-- CMakeLists.txt
    `-- subdir
        |-- CMakeLists.txt
        `-- hello.txt

--------------------------------
------- src/CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/../install )

ADD_SUBDIRECTORY( subdir )

ADD_CUSTOM_TARGET(
  some_target
  COMMAND ${CMAKE_COMMAND} -E echo HELLO
)


--------------------------------
------- src/subdir/CMakeLists.txt:

#ADD_CUSTOM_TARGET(
#  some_subdir_target
#  COMMAND ${CMAKE_COMMAND} -E echo WHOHOO
#)

INSTALL(
  FILES hello.txt
  DESTINATION ./
  )

SET_DIRECTORY_PROPERTIES(
  PROPERTIES
  ADDITIONAL_MAKE_CLEAN_FILES
  ${CMAKE_INSTALL_PREFIX}/hello.txt
  )

---------------------------
---------------------------

As written above, with the target "some_subdir_target" commented out,
the ADDITIONAL_MAKE_CLEAN_FILES will not be respected - - it seems to
be sort of optimized away:

$ cd build/
$ cmake ../src
...
...
$ make install
...
$ ls ../install
hello.txt
$ make clean
$ ls ../install/
hello.txt   # <--- OUCH


--------------------------------
--------------------------------

However, if the target is not commented out it will all work nicely:

--------------------------------
------- src/subdir/CMakeLists.txt:

ADD_CUSTOM_TARGET(
  some_subdir_target
  COMMAND ${CMAKE_COMMAND} -E echo WHOHOO
)

INSTALL(
  FILES hello.txt
  DESTINATION ./
  )

SET_DIRECTORY_PROPERTIES(
  PROPERTIES
  ADDITIONAL_MAKE_CLEAN_FILES
  ${CMAKE_INSTALL_PREFIX}/hello.txt
  )

--------------------------------
--------------------------------


$ cd build/
$ cmake ../src
...
...
$ make install
...
$ ls ../install
hello.txt
$ make clean
$ ls ../install/
         # <no files> -- as expected


----

Any thoughts? Let me know if this is just a misunderstanding, if I
should file a bug on this or if more information is needed.

Best regards

Hugo Heden
Stockholm
Sweden


More information about the CMake mailing list