DEPENDS
如果我在 的部分中包含不存在的文件add_custom_command
,则会失败。有没有办法指定依赖关系可能不存在,但如果它被创建,则应该重新运行命令?
具体来说,我使用的是 Coco/R,它要求Parser.frame
和Scanner.frame
文件存在于与语法文件相同的目录中或由命令行参数指定的目录中,并且Copyright.frame
可以存在或不存在。所以我这样做:
foreach(FRAME_DIR IN ITEMS ${GRAMMAR_DIR} ${ARG_FRAME_DIR})
foreach(FRAME_FILE_NAME IN ITEMS Copyright Scanner Parser)
set(FULL_FRAME_FILE ${FRAME_DIR}/${FRAME_FILE_NAME}.frame)
if(EXISTS ${FULL_FRAME_FILE})
list(APPEND FRAME_FILES ${FULL_FRAME_FILE})
endif()
endforeach()
endforeach()
...
set(GEN_SOURCES ${ARG_OUTPUT_DIR}/Scanner.h ${ARG_OUTPUT_DIR}/Parser.h ${ARG_OUTPUT_DIR}/Scanner.cpp ${ARG_OUTPUT_DIR}/Parser.cpp)
add_custom_command(OUTPUT ${GEN_SOURCES}
COMMAND ${COCOCPP} ${COCOCPP_ARGS}
MAIN_DEPENDENCY ${ARG_GRAMMAR}
DEPENDS ${FRAME_FILES}
VERBATIM)
add_library(${ARG_TARGET} ${GEN_SOURCES})
if
如果我在里面发表评论foreach
,我会得到
ninja: error: '../verification/debug/config/Copyright.frame', needed by 'verification/gen/config/Parser.h', missing and no known rule to make it
在构建时。有了这个if
,文件就生成了,但是如果我Copyright.frame
稍后创建,当然构建程序不会知道它。