Я пытаюсь получить файл, созданный 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} является полным,правильный путьЯ не знаю, является ли это проблемой или просто странностью make.
Я также пытался создать цель верхнего уровня для библиотеки libcore, в каталоге lib / core:
add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
И затем использовать это в предложении DEPENDS.Странная вещь в том, что он работает в первый раз, когда вы делаете чистую сборку, но выдает ошибку при любой последующей сборке.В любом случае, я понимаю, что DEPENDS должен работать только для файловых зависимостей, поэтому это не похоже на правильное решение.(Как у вас есть пользовательская команда, которая зависит от цели верхнего уровня?)
Я также пытался везде указывать абсолютные пути, без эффекта.