Próbuję pobrać plik produkowanego przez add_custom_command w jednym katalogu być zależność o add_custom_command w innym katalogu.CUpewnij: zmaga się z zależnościami add_custom_command
W pierwszym katalogu (lib/rdzeń) Mam polecenie build, który wygląda tak:
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")
W drugim katalogu, mam polecenie, które wykorzystuje moc tego polecenia:
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}")
jednak gdy próbuję budować, pojawia się następujący błąd:
make[3]: *** No rule to make target `lib/core/libcore.bc', needed by `test/stdlib/ReflectionTest.o'. Stop.
Jedna dziwna rzecz widzę, że ścieżka w komunikacie o błędzie jest względną, a nie bezwzględną ścieżką, mimo że wiem, że $ {PROJECT_BINARY_DIR} jest pełną, poprawną ścieżką. Nie wiem, czy to jest problem, czy tylko obcość marki.
Próbowałem zostały również dokonywania cel najwyższego poziomu dla biblioteki libcore w katalogu lib/rdzeń:
add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
A następnie przy użyciu, że w klauzuli zależy. Dziwne jest to, że działa po raz pierwszy, gdy robisz czystą kompilację, ale powoduje błąd podczas każdej kolejnej kompilacji. W każdym razie, moje zrozumienie jest ZWOLNIENIE ma jedynie działać dla zależności plików, więc nie wydaje się to właściwe rozwiązanie. (Jak masz polecenia niestandardowego, który zależy od docelowej najwyższego poziomu wtedy?)
Próbowałem zostały również wprowadzenie ścieżki bezwzględne wszędzie, żadnego efektu.
Niestety, to rozwiązanie nie działa. (Zdaję sobie sprawę, że prawdopodobnie minęło już prawie zero lat). O ile mogę powiedzieć, parametr DEPENDS polecenia add_custom_command MUSI być zależnością od poziomu pliku - chociaż dokumenty mówią, że zależność poziomu celu * w tym samym katalog * będzie działał, w rzeczywistości próbowałem wielu różnych permutacji w ciągu ostatnich 11 miesięcy i żaden z nich nie działał. Oznacza to, że jeśli zdefiniuję cel niestandardowy "foo" w tym samym katalogu, a następnie wykażę ZWOLNIENIE "foo", po prostu zgłosi "brak reguł, aby uczynić cel" foo "..." – Talin
@Talin Więc wydaje się to być bug, czy problem został zgłoszony w [CMake bugtracker] (http://www.cmake.org/Bug/my_view_page.php)? – lef