如何获得CMake的一个实际构建/链接后创建时间戳的文件? (如果可执行文件并没有改变什么都不做

2019-07-03 21:59发布

我想引用date +"%s" > ${TIMESTAMP}为三个可执行文件, myapp_datamyapp_livemyapp_sim我产生(如果创建了相应的可执行文件,即只创建时间戳)。

我似乎无法为什么即使我删除了二进制文件和重新链接没有执行我的自定义命令弄清楚。 建立工作正常 - 只有时间戳代不起作用。

MACRO( MY_APP TAG )
  SET( BINARY_TGT "myapp_${TAG}" )
  SET( TIMESTAMP  "TIMESTAMP_${TAG}" )
  ADD_EXECUTABLE( ${BINARY_TGT} ${APP_SRCS} )

  ADD_CUSTOM_COMMAND(
    OUTPUT  ${TIMESTAMP}
    COMMAND date 
    ARGS    +\"%s\" > ${TIMESTAMP}
    DEPENDS ${BINARY_TGT}
  )
ENDMACRO( MY_APP )

SUBDIRS( data )
SUBDIRS( live )
SUBDIRS( sim  )

里面的数据目录,我有:

FILE(GLOB APP_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} main_data.cpp)
SET( MY_TAG data )
MY_APP( "${MY_TAG}" )

Answer 1:

除非事情取决于它们的输出CMake的不运行自立的自定义命令。 一种选择是自定义命令更改为生成后:

add_custom_command(
  TARGET ${BINARY_TGT}
  POST_BUILD
  COMMAND date +\"%s\" > ${TIMESTAMP}
  VERBATIM
)

另一种选择是增加一个自定义的目标,以驱动自定义命令(多个)。 一个目标是满足所有自定义命令。

add_custom_target(
  GenerateTimestamps ALL
  DEPENDS ${yourListOfTimestampFiles}
)

但是,我不知道,如果你希望重定向会工作。 当键入>在壳/命令提示,它不是一个参数传递给程序,但对壳/命令处理器的指令。 如果它不工作(我从来没有测试过),你得把的调用date到脚本。



文章来源: How to get cmake to create timestamp file after an actual build/link? (do nothing if executable hasn't changed)
标签: cmake