Я пытаюсь получить файл, созданный командой 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 должен работать только для зависимостей файлов, поэтому это не похоже на правильное решение. (Как у вас есть пользовательская команда, которая зависит от целевого уровня верхнего уровня?)
Я также старался помещать абсолютные пути везде, без эффекта.