2011-05-12 5 views
2

gcc와 make를 사용하여 컴파일 할 C 파일 세트가 있습니다. 빌드 프로세스가 정상적으로 작동합니다. 전처리 매크로없이 모든 소스 코드를 포함하는 하나의 C 파일을 컴파일 할 때 얻을 수 있는지 알고 싶습니다.여러 소스를 컴파일 할 때 하나의 C 파일 만들기

+2

왜 이것을 필요합니까? 실제 문제는 무엇을 해결하려고합니까? –

+0

나는 C를위한 특수 목적의 정적 분석기를 만들려고하고있다. 그래서 여러 파일들을 가진 복잡한 프로젝트의 분석을 단순화하기 위해 하나의 파일에 모든 소스를 모으고 싶다. –

답변

1

포함됩니다

gcc -E main.c other.c another.c 

이것은 stdlib 함수가 포함될 수도 있습니다. -nostdinc

+0

-E 옵션이 잘 동작합니다. 고마워요! –

0

일반적으로 컴파일러를 호출하여 단일 소스 파일 만 컴파일하면 오브젝트 파일이 생성됩니다. 나중에 모든 개체 파일에서 링커를 호출하여 실행 파일을 만듭니다. 사용 가능한 원래의 C 소스 코드가 없습니다.

그러나 소스 파일을 사전 처리하기 위해 -E 옵션과 함께 gcc를 호출하는 별도의 쉘 스크립트를 만든 다음 cat 유틸리티를 사용하여 모든 소스를 단일 파일에 넣을 수 있습니다.

+2

gcc'-E' 옵션을 사용하여 파일 전처리 만 수행합니다. – CodeButcher

+0

@CodeButcher : 감사합니다. 내 대답이 업데이트되었습니다. –

0

-save-temps 옵션을 사용하면 중간 출력을 얻을 수 있습니다. 그러나 소스 파일 당 하나의 출력 파일이됩니다. 각 소스 파일은 별도로 컴파일되고 혼합 될 수없는 컴파일 단위를 나타냅니다.
-E 옵션을 사용할 수도 있지만 전처리기만 실행하고 컴파일은 계속하지 않습니다.

2

한 가지 간단한 방법은 다른 모든 소스 파일을 포함하는 파일을 만드는 것입니다.

$cat *.c > metafile.c 

이는 '한 번 프라그'을 설정 ifndef가이 파일은 아마 스스로 컴파일 할 수 없을 것입니다 방법에 따라, 이러한 파일을 만들 것입니다. 한편

, 당신은 그 대답은 GCC에 다음을 추가하기 위해 전처리 매크로의 전개와 평가 된 모든 파일에 원하는 경우 : 다음

-save-temps

파일 당신이 GCC 컴파일러의 모든 파일을 포함 할 경우 사용할 수 있습니다 한 번에 .ii이 펼쳐진 평가 매크로

+0

+1하지만'> metafile.c'이 아닌'> metafile.cpp' –

관련 문제