project(testRebuild) add_library(foo STATIC ${testRebuild_BINARY_DIR}/foo.cxx) # Add a generated header that regenerates when the generator is # rebuilt. add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/regen.h COMMAND generator ${CMAKE_CURRENT_BINARY_DIR}/regen.h regen DEPENDS generator # adds file-level dependency to re-run rule ) # Add a generated header that does NOT regenerate when the generator # is rebuilt. add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/noregen.h COMMAND generator ${CMAKE_CURRENT_BINARY_DIR}/noregen.h noregen ) # Test that the generator rebuilds when the static library source file # changes. This should cause regen.h to be recreated also. add_executable(generator generator.cxx) target_link_libraries(generator foo) # Build an executable to drive the build and rebuild. include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_executable(bar bar.cxx ${CMAKE_CURRENT_BINARY_DIR}/regen.h ${CMAKE_CURRENT_BINARY_DIR}/noregen.h ) #----------------------------------------------------------------------------- IF("${CMAKE_GENERATOR}" MATCHES "Make") # Test the IMPLICIT_DEPENDS feature. SET(ZOT_DEPENDS IMPLICIT_DEPENDS CXX ${CMAKE_CURRENT_SOURCE_DIR}/dep.cxx) SET(ZOT_CUSTOM_DEP IMPLICIT_DEPENDS CXX ${CMAKE_CURRENT_SOURCE_DIR}/dep_custom.cxx) ELSE("${CMAKE_GENERATOR}" MATCHES "Make") # No IMPLICIT_DEPENDS...just depend directly. SET(ZOT_DEPENDS DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx.in) SET(ZOT_CUSTOM_DEP DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/zot_custom.hxx.in) ENDIF("${CMAKE_GENERATOR}" MATCHES "Make") add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx.in ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx ${ZOT_DEPENDS} ) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zot_custom.hxx COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/zot_custom.hxx.in ${CMAKE_CURRENT_BINARY_DIR}/zot_custom.hxx ${ZOT_CUSTOM_DEP} ) add_custom_target(zot_custom ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/zot_custom.hxx) add_executable(zot zot.cxx ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx) add_dependencies(zot zot_custom)