gpt4 book ai didi

cmake - 如何使CMake目标执行是否更改了指定文件?

转载 作者:行者123 更新时间:2023-12-03 20:26:05 28 4
gpt4 key购买 nike

我正在尝试在我的C ++项目中使用ANTLR。我为指定的语法运行了ANTLR生成器的目标,并使主程序依赖于它。

ADD_CUSTOM_TARGET(GenerateParser
COMMAND ${ANTLR_COMMAND} ${PROJECT_SOURCE_DIR}/src/MyGrammar.g
-o ${PROJECT_SOURCE_DIR}/src/MyGrammar
)

ADD_LIBRARY(MainProject ${LIBRARY_TYPE} ${TARGET_SOURCES} ${TARGET_OPTIONS})
ADD_DEPENDENCIES(MainProject GenerateParser)


问题在于,每次我构建项目时,ANTLR生成器都会运行,并占用足够的时间。如何仅在语法未更改的情况下运行它?或者有可能使ANTLR只为过时的语法生成解析器。

最佳答案

如果您正确地构造对它的调用,则add_custom_command可以解决问题。

这样的事情应该起作用:

ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/src/MyGrammar
COMMAND ${ANTLR_COMMAND} ${PROJECT_SOURCE_DIR}/src/MyGrammar.g
-o ${PROJECT_SOURCE_DIR}/src/MyGrammar
DEPENDS ${PROJECT_SOURCE_DIR}/src/MyGrammar.g
)

ADD_CUSTOM_TARGET(GenerateParser ALL
DEPENDS ${PROJECT_SOURCE_DIR}/src/MyGrammar
)

ADD_LIBRARY(MainProject ${LIBRARY_TYPE} ${TARGET_SOURCES} ${TARGET_OPTIONS})
ADD_DEPENDENCIES(MainProject GenerateParser)


在这里,自定义目标每次都会“构建”,但唯一要做的就是构建依赖于其输出的自定义命令,但前提是自定义命令的输出相对于其DEPENDS是过时的文件。

关于cmake - 如何使CMake目标执行是否更改了指定文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862300/

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