【发布时间】:2010-10-24 20:13:00
【问题描述】:
我试图让一个目录中的 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