2014-11-24 6 views
1

Я ищу способ заставить CMake повторно запускать команду оболочки каждый раз, когда она обнаруживает, что изменения для конкретного целевого/исполняемого файла были изменены. Я попытался добавить пользовательскую команду, которая имеет зависимость от цели, но это, похоже, не делает трюк.Rerun execute_process при изменении файла

Пример того, что я думал, может работать:

ADD_CUSTOM_COMMAND(
      OUTPUT temp 
      DEPENDS my_Target 
      COMMAND ./some_command.sh) 

Любые предложения команды, которые могут быть в состоянии выполнить команду, когда изменение зависимостей было обнаружено для мишени. Или еще лучше, если мы сможем проверить изменение определенных файлов.

+0

'some_command.sh' должен быть запущен до создания' my_target'. Поэтому да темп будет частью 'my_target'. – MZimmerman6

ответ

-3

add_custom_command() использует простую проверку для существования файла , чтобы определить, должна ли выполняться команда. Если он не существует, то CMake сделайте make my_Target и только затем запустите свою команду. В то же время, если существует OUTPUT, CMake вообще ничего не запускает.

Чтобы достичь того, чего вы хотите, вы должны add_custom_target() (возможно с ALL ключевым словом, чтобы запустить его с make) и осуществлять проверку изменений внутри вашего some_command.sh.

+0

'использует простую проверку существования файла OUTPUT, чтобы определить, должна ли команда запускаться', также проверяет, что OUTPUT старше, чем любой из файлов/целей в DEPENDS. 'Если этого не существует, то CMake делает my_Target и только тогда запускает вашу команду' nope, эта команда будет вызываться только в том случае, если OUTPUT является частью некоторой цели, если нет целей, которые используют OUTPUT, эта команда никогда не будет срабатывает. 'если OUTPUT существует, CMake вообще ничего не запускает. Обратите внимание на приведенное выше примечание, оно может выполняться, если OUTPUT не является достаточно свежим. –

+0

'осуществлять проверку изменений внутри вашего some_command.sh', в чем смысл проверки в скрипте, если cmake может сделать это за вас? –

+0

Не знал о DEPENDS, спасибо за информацию. – arrowd

0

Из вашего описания, это звучит, как вы могли бы это:

cmake_minimum_required(VERSION 2.8) 
project(cmaketest) 

add_custom_command(OUTPUT some_file.cpp 
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp 
    COMMAND ${CMAKE_COMMAND} -E copy 
     ${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp 
     ${CMAKE_CURRENT_BINARY_DIR}/some_file.cpp 
    VERBATIM 
) 

add_executable(mn main.cpp some_file.cpp) 

Поместите выходной файл в списке источников мишени, которая зависит от него.

+0

Предполагается, что команда должна запускать сценарий, который автоматически генерирует файлы кода. Эти файлы кода затем должны быть добавлены в список источников и использоваться в целевом объекте. Так может ли аргумент COMMAND быть любой командой cmake или bash или он должен следовать определенному формату? – MZimmerman6

+0

Это может быть любая команда. – steveire

Смежные вопросы