gpt4 book ai didi

cmake - cmake:努力与add_custom_command依赖项

转载 作者:行者123 更新时间:2023-12-03 23:51:27 31 4
gpt4 key购买 nike

我正在尝试使一个目录中的add_custom_command生成的文件成为另一目录中的add_custom_command的依赖项。

在第一个目录(lib / core)中,我有一个构建命令,如下所示:

add_custom_command(
OUTPUT libcore.bc
COMMAND tartln -filetype=bc -link-as-library -o libcore.bc ${STDLIB_BC_FILES}
DEPENDS ${STDLIB_BC_FILES} tartln
COMMENT "Linking libcore.bc")


在第二个目录中,我有一个使用该命令输出的命令:

add_custom_command(OUTPUT ${OBJ_FILE}
COMMAND tartln -disable-fp-elim -filetype=obj -o ${OBJ_FILE} ${BC_FILE}
"${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
MAIN_DEPENDENCY "${BC_FILE}"
DEPENDS "${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
COMMENT "Linking Tart bitcode file ${BC_FILE}")


但是,当我尝试构建时,出现以下错误:

make[3]: *** No rule to make target `lib/core/libcore.bc', needed by `test/stdlib/ReflectionTest.o'.  Stop.


尽管我知道$ {PROJECT_BINARY_DIR}是完整的正确路径,但我看到的一件奇怪的事情是错误消息中的路径是相对路径,而不是绝对路径。我不知道这是一个问题还是一个陌生的品牌。

我还尝试过在lib / core目录中为libcore库创建顶级目标:

add_custom_target(libcore DEPENDS libcore.bc libcore.deps)


然后在DEPENDS子句中使用它。奇怪的是,它在您第一次执行干净构建时就可以使用,但是在以后的任何构建中都会出错。无论如何,我的理解是DEPENDS仅应用于文件依赖项,因此这似乎不是正确的解决方案。 (然后,您如何拥有一个依赖于顶级目标的自定义命令?)

我也尝试过在所有地方都放置绝对路径,没有效果。

最佳答案

cmake文档对DEPENDS参数说了以下内容:


DEPENDS选项指定命令所依赖的文件。如果
任何依赖关系都是同一命令中另一个自定义命令的输出
目录(CMakeLists.txt文件)CMake自动带给另一个
将定制命令添加到构建此命令的目标中。如果
DEPENDS指定任何目标(由ADD_ *命令创建)
创建目标级别的依赖关系以确保目标已构建
在使用此自定义命令的任何目标之前。


因此,我认为您将必须使用add_custom_target定义目标并依赖于此。

add_custom_target的文档说:


DEPENDS参数列出的依赖项
可以引用使用以下命令创建的文件和自定义命令的输出
同一目录(CMakeLists.txt文件)中的add_custom_command()。


因此,您将必须使用add_custom_command和add_custom_target,如下所示:


在生成bc文件的第一个目录中,您需要执行

add_custom_command(OUTPUT libcore.bc ... ) # just as in your question
add_custom_target (LibCoreBC DEPENDS libcore.bc)
在第二个目录中

add_custom_command (OUT ${OBJ_FILE} DEPENDS LibCoreBC ....)

关于cmake - cmake:努力与add_custom_command依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010212/

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