x 또는 y와 같은 특정 이름의 출력 파일에 어떻게 전처리기를 저장할 수 있습니까? -E가있는 GCC 전 처리기와 x라는 파일에 저장
gcc -E -o pgcd.c x.o
는하지만 솔루션 인하지 않는 것 :
나는 명령 줄을 시도했다.
ps : 컴파일 전에 파일이 존재하지 않습니다. 전 정의한 이름의 파일에 전 처리기를 저장합니다.
도움 주셔서 감사합니다.
x 또는 y와 같은 특정 이름의 출력 파일에 어떻게 전처리기를 저장할 수 있습니까? -E가있는 GCC 전 처리기와 x라는 파일에 저장
gcc -E -o pgcd.c x.o
는하지만 솔루션 인하지 않는 것 :
나는 명령 줄을 시도했다.
ps : 컴파일 전에 파일이 존재하지 않습니다. 전 정의한 이름의 파일에 전 처리기를 저장합니다.
도움 주셔서 감사합니다.
gcc -E file.c
의지 전처리 file.c
와 표준 출력 (콘솔)로 전처리 된 소스 코드를 작성. 따라서, 전처리 된 출력을 저장 선택한 파일에 표준 출력을 리디렉션 :
gcc -E file.c > somefile
.o
확장자를 가지고 somefile에 대한 나쁜 생각이다. GCC 및 기타 도구는 파일이 코드의 개체를 컴파일시 출력으로 포함한다는 의미로 .o
확장을 해석합니다. 전처리 file.c
은 개체 코드를 생성하지 않습니다. 그것은 단지 당신이 나중에 컴파일 할 수있는 전처리 된 소스 코드를 생성합니다.
전처리 된 C 소스 코드의 일반적인 파일 확장명은 .i
(사전 처리 된 C++ 소스 코드의 경우 .ii
)입니다. 따라서
gcc -E file.c > file.i
이 적절한 선택입니다.
file.i
에는 프리 프로세서 라인 마커가 포함되어 있습니다.
# 1 "file.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "file.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
...
...
당신이이 라인 마커 출력에 표시하지 않는 경우, -P
옵션 추가 :
gcc -E -P file.c > file.i
대단히 감사합니다. .i 확장명을 사용하지 않으면 어떤 차이가 있습니까? –
출력에 차이는 없겠지만 앞에서 말했듯이'.o '확장자를 사용하면 사람들과 도구를 오도하게 만들 것입니다. 컴파일러 및 링커는 파일이 객체 코드 파일이라고 생각합니다. –
@ChrysBltr GCC가'.i' 파일을 전처리 된 C 코드로 인식하고 불필요한 전처리 단계를 건너 뛰고 특별한 프롬프트없이 C로 입력 파일을 컴파일한다고 덧붙입니다. –
을'GCC -E pgcd.c -o x.o'? –
'gcc'는'x.o' 파일 (C 소스 파일이 아닌)을 무시했을 수도 있습니다. 자비로'pgcd.c' 소스 파일을 지우지 않게 저장합니다. (VCS 버전 제어 시스템에 아직 백업이 있습니까?)'-o' 옵션은 파일 이름 인수를 취합니다.이 인수는 수행중인 작업의 출력에서 덮어 씁니다. 주의하세요! –
.o 확장자없이 {gcc -E pgcd.c -o x}를 시도했는데, x 파일이 생성 되었기 때문에 그것이 작동한다고 생각합니까? 그래서 pgcd.c는 덮어 써서는 안됩니다. –