Use add_custom_command’s to create a file transformation chain
- *.(cxx|hxx) -> *_(cxx|hxx)_tro
- *_(cxx|hxx)_tro -> Foo.trx
and make the last transformation an first class entity in cmake by using add_custom_target. By default this target won’t be build, unless you mark it with ALL or let another target that is built depend on it.
set(SOURCES foo.cxx foo.hxx) add_library(Foo ${SOURCES}) set(trofiles) foreach(_file ${SOURCES}) string(REPLACE "." "_" file_tro ${_file}) set(file_tro "${file_tro}_tro") add_custom_command( OUTPUT ${file_tro} COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/trans.pl ${CMAKE_CURRENT_SOURCE_DIR}/${_file} -o ${file_tro} DEPENDS ${_file} ) list(APPEND trofiles ${file_tro}) endforeach() add_custom_command( OUTPUT Foo.trx COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/combine.pl ${trofiles} -o Foo.trx DEPENDS ${trofiles} ) add_custom_target(do_trofiles DEPENDS Foo.trx) add_dependencies(Foo do_trofiles)