2013-04-09 1 views
1

많은 매크로가있는 C 코드를 디버깅해야합니다. 그 중 일부는 전혀 사소한 것이 아니며 여러 행을 포함합니다. 매크로를 한 행으로 확장하고 오류가 어디서 발생하는지 모르기 때문에 디버깅이 불가능합니다. 반면에, sed을 사용하면 프리 프로세서 출력을 가져 와서 각 세미콜론 다음에 줄을 추가하는 것이 쉽습니다.컴파일러 스테이지 추가

매크로에 관해서는 많이 할 수 없기 때문에 매크로를 사용하는 것이 좋습니다. 하지만 전처리와 컴파일 사이에 컴파일러 (icc, gcc, xlc)를 사용하여 컴파일러에 스테이지를 추가 할 수 있는지 알고 싶습니다. 따라서 sed 명령을 사용하십시오.

$ g++ -E in.c -o in.i 

이 그런 다음 나오지도 스크립트를 실행하고 (아무 -E이 시간) ++ g과 출력의 컴파일 할 수있는 일

답변

0

지금까지 나는 this post에서 찾은 것을 시도 할 것입니다. 또한 단일 파일을 컴파일하기위한 래퍼 옵션을 시도해 보았습니다. 잠시 후 트릭을 수행합니다. 래퍼에서 파일을 전처리 (-E) 한 다음 전처리 된 파일을 sed 및 일부 규칙으로 처리 한 다음 컴파일합니다.

3

은 전처리 전용 (-E)를 실행하는 것입니다. 당신은 Makefile에서이 모든 것을하기위한 규칙을 만들 수 있습니다.

+0

그래, 난 할 수 있지만, 메이크 많은 변경 할 규칙이 있습니다. 한 컴파일 단계와 다른 컴파일 단계 사이에서 뭔가를하도록 컴파일러에게 구체적으로 알려주는 방법이 있는지 궁금합니다. –

+0

gcc에는 그런 것이 없다고 생각합니다. 아마도 다른 컴파일러가 가지고있을 것입니다. – piokuc

+2

@ Genís의 표준 트릭은 'g ++'를 두 번 호출하고 '-E'를 추가하고 첫 번째 실행을 위해'-o' 파일 이름을 변경하는 래퍼 스크립트를 사용하는 것입니다. –

0

g++ -E을 실행하는 스크립트, 다음 sed -mangler, 다음 g++로 자신의 "컴파일러"를 정의하고 전체 컴파일러 하나 지정. 임시 보관함을 사용하여 mktemp의 예의를 지키십시오. 따라서 컴파일을 병렬로 시작하면 (make -j) 문제가 해결되지 않습니다.

는 (오늘의 GCC는 어쨌든 쉽게 할 수없는 뭔가를 주입, 더 이상 별도의 전처리 단계가 없습니다.)