${TIMESTAMP}和我生成的 myapp_sim (即,仅在创建相应的可执行文件时才创建时间戳-6ren">
gpt4 book ai didi

cmake - 如何让 cmake 在实际构建/链接后创建时间戳文件? (如果可执行文件没有更改,则不执行任何操作)

转载 作者:行者123 更新时间:2023-12-02 04:49:51 24 4
gpt4 key购买 nike

我想为三个可执行文件 myapp_datamyapp_live 分别调用 date +"%s"> ${TIMESTAMP}和我生成的 myapp_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}" )

最佳答案

CMake 不会运行独立的自定义命令,除非某些内容取决于其输出。一种选择是将自定义命令更改为构建后:

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

另一个选项是添加自定义目标来驱动自定义命令。一个目标足以执行所有自定义命令。

add_custom_target(
GenerateTimestamps ALL
DEPENDS ${yourListOfTimestampFiles}
)
<小时/>

但是,我不确定重定向是否会按您的预期工作。当您在 shell/命令提示符中键入 > 时,它不是程序的参数,而是发送给 shell/命令处理器的指令。如果它不起作用(我从未测试过),您必须将 date 的调用放入脚本中。

关于cmake - 如何让 cmake 在实际构建/链接后创建时间戳文件? (如果可执行文件没有更改,则不执行任何操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13419255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com