在文件更改时重新运行execute_process

时间:2014-11-24 21:39:00

标签: makefile cmake

我正在寻找一种让CMake每次检测到特定目标/可执行文件的依赖关系发生变化时重新运行shell命令的方法。我尝试添加一个自定义命令,它依赖于一个目标,但这似乎没有做到这一点。

我认为可行的例子:

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

在检测到目标的依赖项更改时,可能能够运行命令的命令的任何建议。如果我们可以检查特定文件的更改,甚至更好。

2 个答案:

答案 0 :(得分: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)

将输出文件放在目标的源列表中,这取决于它。

答案 1 :(得分:-3)

add_custom_command()使用OUTPUT文件存在的简单检查来确定是否应该运行该命令。如果它不存在,则CMake执行make my_Target,然后才运行您的命令。同时,如果存在OUTPUT,则CMake根本不会运行任何内容。

要实现您的目标,您需要add_custom_target()(可能使用ALL关键字与make一起运行)并实施检查some_command.sh内的更改。