CMake: How to execute a command before make install?

cmake, installation, linux

Solution

Take a look at the `SCRIPT` version of `install`:

The SCRIPT and CODE signature:

`install([[SCRIPT <file>] [CODE <code>]] [...])`

The SCRIPT form will invoke the given CMake script files during installation. If the script file name is a relative path it will be interpreted with respect to the current source directory. The CODE form will invoke the given CMake code during installation. Code is specified as a single argument inside a double-quoted string.

For example:

install(CODE "execute_process(COMMAND \"./Convertor a.xml a-converted.xml\")")
install(FILES a-converted.xml DESTINATION ${INSTDIR})

Be sure to checkout the `entry for execute_process` in the manual. Also be aware that macro expansion inside the `CODE` parameter can be a bit tricky to get right. Check the generated `cmake_install.cmake` in your build directory where the generated code will be placed.

Problem

This is the way I install the config files: ``` file(GLOB ConfigFiles ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.xml ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.xsd ${CMAKE_CURRENT_SOURCE_DIR}/configs/*.conf) install(FILES ${ConfigFiles} DESTINATION ${INSTDIR}) ``` But I need to convert one of the xml files before installing it. There is an executable that can do this job for me: ./Convertor a.xml a-converted.xml How can I automatically convert the xml file before installing it? It should be a custom command or target that installing depends on it, I just don't know how to make the `install` command depend on it though. Any advice would be appreciated!

Original source