Makefile不会生成目标文件的最终副本

Makefile不会生成目标文件的最终副本,makefile,Makefile,我有一个有趣的问题。我有一个makefile,它构建文件,然后进行后期处理,然后将最终处理的文件复制到发布文件夹 当我运行make时,它将正确构建所有内容,然后在不将最终目标文件复制到发布文件夹的情况下完成。我必须再次运行make,以查看生成的(新构建的)文件比发布目标更新,并将其复制过来 我甚至加入了sleep5,以延迟最终版本目标检查,以允许任何文件IO完成并用适当的时间戳更新新构建的文件 release : ./release/file.xml ./release/file.xml :

我有一个有趣的问题。我有一个makefile,它构建文件,然后进行后期处理,然后将最终处理的文件复制到发布文件夹

当我运行
make
时,它将正确构建所有内容,然后在不将最终目标文件复制到发布文件夹的情况下完成。我必须再次运行make,以查看生成的(新构建的)文件比发布目标更新,并将其复制过来

我甚至加入了
sleep5
,以延迟最终版本目标检查,以允许任何文件IO完成并用适当的时间戳更新新构建的文件

release : ./release/file.xml

./release/file.xml : gen/file_processed.xml sleep
    cp gen/file_processed.xml ./release/file.xml

gen/file_processed.xml : gen/file.xml
    python2.6 post_processing_scripts.py #saves output as gen/file_processed.xml

gen/file.xml : source_files
    command to compile gen/file.xml

sleep :
    sleep 5
不起作用的是make认为,在编译所有其他目标并执行sleep recipe等待5秒后,它仍然说
gen/file\u processed.xml
比发布目标早。我必须重新运行make以完成最后一步

关于我可以添加什么让生成的文件在与发布目标进行检查之前完成更新,有什么想法吗

非常感谢你的帮助,我很感激

干杯

布拉德

更新:

我修改了代码,这样就消除了关于sleep命令始终执行的问题。但其行为仍与上述相同

release : ./release/file.xml

./release/file.xml : gen/file_processed.xml
    cp gen/file_processed.xml ./release/file.xml

gen/file_processed.xml : gen/file.xml
    python2.6 post_processing_scripts.py #saves output as gen/file_processed.xml; sleep 5;

gen/file.xml : source_files
    command to compile gen/file.xml
我仍然需要运行make两次,以便将最终文件复制过来


我将尝试确保这个示例准确地映射我的原始makefile所做的工作。

所以。。。您正在运行哪个规则?睡眠规则的存在意味着每次运行make时,它都会将文件复制到发布目录,而不管源文件是否已更改(除非您碰巧有一个名为“睡眠”的文件或目录)。删除睡眠依赖项,它将仅在源_文件更改时复制。我能看到您获得所描述行为的唯一方法是,如果调用它的shell退出后,python脚本分叉并继续在后台运行…@IgnacioVazquez Abrams这在我运行release时发生。@chrisdDodd正确…它总是执行睡眠,但这对我来说不是什么大不了的事。至于python代码……没有并行编程在进行……它只是简单的python(没有线程或分叉之类的东西)。