2016-10-13 4 views
0

Hilton Lipschitz의 blog에서 Makefile을 만들었으며 디버그 정보를 생성하기 위해 약간의 변경을가했습니다. 주요 부품이 나열되어 있습니다 :Makefile (-c -g)에서 분리 된 컴파일/링크 프로세스로 gcc/clang에서 디버그 정보를 생성하는 방법은 무엇입니까?

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 다음 명령을 실행합니다 (경로는 ...로 요약) : I

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... 

이 문제는 이러한 명령을 실행

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 동안 make 또는 make debug을 실행하면 program.dSYM 하위 폴더는 0으로 생성되지 않습니다.폴더. 대신에, 나는 -c 인수없이 컴파일 할 때 :

clang -arch x86_64 -g -O0 -I... -L... -o bin/program.o src/program.c 

모두 실행 파일 및 .dSYMbin 폴더에 생성됩니다.

  1. 컴파일 및 링크 프로세스를 분리하는 동안 어떻게 디버깅 정보 생성 기능을이 Makefile에 추가 할 수 있습니까?
  2. 단계 (컴파일/링크) 디버그 정보가 생성됩니까?

UPDATE : 나는 GitHub의 repo를 생성하고 여기에 관련 메이크와 소스를 업로드했습니다. 문제를 재현하려면 터미널에서 다음 명령을 실행하십시오

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 

반면에 -c 인수없이 clang을 실행하는 경우 :

폴더의 617,451,515,
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 

내용은 다음과 같습니다

$ ls bin 
program  program.dSYM 

답변

0

당신은 .dSYM 파일을 생성하기 위해뿐만 아니라 링커 조리법에 -g을 추가해야하는 표준 방식을 추가하는 것입니다

debug: LDFLAGS += -g 

하지만 다음 예제에서는 별다른 이유없이 자체 변수를 정의하지만 LIB이 작동해야합니다.

+0

링커에'-g' 플래그를 추가해도 .dSYM 파일이 생성되지 않습니다. 컴파일러와 링커 모두에'-g'를 추가하려고 시도했지만 결과는 같습니다. –

+0

@HamidRohani 귀하의 질문에 자체 포함 된 예제를 추가, 그것은 나를 위해 잘 작동합니다. – user657267