我尝试编写如下的cmake脚本:
set(OUTPUT_FILE "${CMAKE_BINARY_DIR}/static_init/generated/${target}/static_init.cpp")
set(DEP_FILE "${CMAKE_BINARY_DIR}/static_init/input/${target}.d")
write_file(${DEP_FILE} "${OUTPUT_FILE}: ")
add_custom_command(
OUTPUT ${OUTPUT_FILE}
COMMAND ${Python3_EXECUTABLE} myscript.py
DEPFILE ${DEP_FILE}
VERBATIM)
我希望,我将填充.d文件在我的脚本第一次启动和以后的自定义命令将重新运行时,只有其中一个文件后列出的冒号将改变。相反,命令是运行在每次编译,即使有空的依赖列表。打印我自己的源代码在cmake运行也导致我不断命令重新运行。我做错了什么(或理解错了什么)?
3.18.5忍者叮当
2条答案
按热度按时间6mw9ycah1#
忍者在阅读depfiles后默认删除它们。这将导致您所看到的行为。
1l5u6lss2#
问题是DEPFILE选项和depfile中的目标名称必须是相对于构建目录的,而不是绝对路径。ninja -d explain帮助我找到了它。