2016-10-13 10 views
0

Я сделал 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.

  1. Как добавить функцию генерации отладочной информации в этот файл Makefile при разделении процесса компиляции и компоновки?
  2. В какой форме производится отладочная информация (компиляция/связывание)?

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 

ответ

0

Вам нужно добавить -g к рецепту линкера, а также для того, чтобы генерировать .dSYM файлы стандартным способом было бы добавить

debug: LDFLAGS += -g 

, но пример, который вы используете, определяет его собственные переменные без уважительной причины, похоже, что LIB должен работать.

+0

Добавление флага -g в компоновщик не будет генерировать файлы .dSYM. Я попытался добавить '-g' к компилятору и компоновщику, но результат тот же. –

+0

@HamidRohani Добавьте на свой вопрос индивидуальный пример, он отлично подходит для меня. – user657267