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