Я смог решить это в двух частях:
<сильный>1. Заставьте Tup использовать точные пути
Во-первых, чтобы исполняемый файл ссылался на .o
файлы в их фактическом местоположении, Tup должен запускаться в chroot (подробнее здесь и в документах). Это делается путем помещения c
после знака вставки в команде Tup.
Итак, мои команды сборки пошли от чего-то вроде
: foreach code/*.cpp |> ^o compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}
to
: foreach code/*.cpp |> ^oc compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}`
Это дало правильные пути к исполняемому файлу, но файлы .o
по-прежнему ссылались на исходные файлы, как если бы они находились в подкаталоге сборки, а не в основном каталоге, что приводило к:
<сильный>2. Сообщите LLDB, где искать источник
Таким образом, LLDB считает, что источник находится в /Users/leo/project/subdirectory/code
, но на самом деле он находится в /Users/leo/project/code
. Это решается в соответствии с этим вопросом сказав LLDB заменить один путь на другой:
(lldb) settings set target.source-map /Users/leo/project/subdirectory /Users/leo/project
(Кажется, это не работает с относительными путями, и это позор, поскольку это означает, что требуется решение для каждой машины-разработчика. Если кто-нибудь знает решение, которое будет работать независимо от того, где находится проект, дайте мне знать!)
Вы также можете автоматизировать это, запустив исходный файл LLDB с этой строкой в: lldb -s path/to/lldb/config/file
.
person
Leo
schedule
08.05.2016