Я сделал Makefile из альбома blog от Hilton Lipschitz и внес небольшие изменения в него, чтобы генерировать отладочную информацию. Основные части перечислены:Как генерировать отладочную информацию в gcc/clang с разделенным процессом компиляции/ссылки в Makefile (-c -g)?
CC := clang -arch x86_64
CFLAGS := -c -O0
$(TARGET): $(OBJECTS)
@echo " Linking $(TARGET)"; $(CC) $^ -o $(TARGET) $(LIB)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDLIST)
@echo "Compiling $<..."; $(CC) $(CFLAGS) $(INC) -o [email protected] $<
debug: CFLAGS += -g
debug: $(TARGET)
Теперь make
запускает эти команды (дорожки суммируются с ...
):
clang -arch x86_64 -c -O0 -I... -o build/program.o src/program.c
clang -arch x86_64 build/program.o -o bin/program -L...
Хотя make debug
запускает эти команды:
clang -arch x86_64 -c -O0 -g -I... -o build/program.o src/program.c
clang -arch x86_64 build/program.o -o bin/program -L...
Проблема заключается в том, когда я выполнить make
или make debug
, нет program.dSYM
подпапка будет сделана в bin
папка. Вместо этого, когда я компилирую без -c
аргумента:
clang -arch x86_64 -g -O0 -I... -L... -o bin/program.o src/program.c
как исполняемый файл и .dSYM
создаются в папке bin
.
- Как добавить функцию генерации отладочной информации в этот файл Makefile при разделении процесса компиляции и компоновки?
- В какой форме производится отладочная информация (компиляция/связывание)?
UPDATE: Я создал GitHub repo и загружен соответствующий Makefile и источник его. Чтобы воспроизвести проблему, пожалуйста, выполните следующие команды в терминале:
git clone https://github.com/hamid914/gdb-lldb-test.git
cd gdb-lldb-test
make debug
Последняя строка, make debug
выполняет следующие команды:
clang -arch x86_64 -c -O0 -std=c11 -g -I include -I include/libs -I /usr/local/include -o build/program.o src/program.c
clang -arch x86_64 build/program.o -o bin/program -L /usr/local/lib -lm -g
и содержание bin
папки:
$ ls bin
program
Хотя если я запустил clang
без -c
аргумент:
clang -arch x86_64 -O0 -std=c11 -g -I include -I include/libs -I /usr/local/include -L /usr/local/lib -lm -o bin/program src/program.c
Содержание bin
папки являются:
$ ls bin
program program.dSYM
Добавление флага -g в компоновщик не будет генерировать файлы .dSYM. Я попытался добавить '-g' к компилятору и компоновщику, но результат тот же. –
@HamidRohani Добавьте на свой вопрос индивидуальный пример, он отлично подходит для меня. – user657267