Я пытаюсь получить файл, созданный командой add_custom_command в одном каталоге, в зависимости от add_custom_command в другом каталоге.cmake: борется с зависимостями add_custom_command
В первом каталоге (Библиотека/ядро) у меня есть команда сборки, которая выглядит следующим образом:
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/ядра:
add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
И затем, используя, что в пункте ЗАВИСИТ. Странная вещь в том, что это работает в первый раз, когда вы делаете чистую сборку, но выдает ошибку при любой последующей сборке. В любом случае, я понимаю, что DEPENDS должен работать только для зависимостей файлов, поэтому это не похоже на правильное решение. (Как у вас есть пользовательская команда, которая зависит от целевого уровня верхнего уровня?)
Я также попытался установить абсолютные пути везде, без эффекта.
К сожалению, это решение не работает. (Я понимаю, что это, вероятно, безнадежный ответ после того, как прошло почти год.) Насколько я могу судить, параметр DEPENDS add_custom_command ДОЛЖЕН быть зависимым от файлового уровня - хотя документы говорят, что зависимость уровня на уровне * в том же каталог * будет работать, на самом деле я пробовал много разных перестановок за последние 11 месяцев, и никто из них не работает. То есть, если я определяю пользовательскую целевую «foo» в том же каталоге, а затем скажу DEPENDS «foo», она просто сообщит «нет правил, чтобы сделать цель» foo »... – Talin
@Talin Итак, это похоже на ошибка, есть ли проблема, указанная для этого в [CMake bugtracker] (http://www.cmake.org/Bug/my_view_page.php)? – lef