cmake: борьба с зависимостями add_custom_command

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

Я также пробовал везде указывать абсолютные пути, безрезультатно.

13
задан Talin 24 October 2010 в 20:13
поделиться