2010-05-03 3 views
3

파일을 #include하고 CPPFLAGS를 사용하여 필요한 파일을 찾는 데 C preprocessor에 지시하면 파일이 이미 포함되어 있습니다. CFLAGS가 포함 된 동일한 디렉토리에 대해 C 컴파일러에 알려주는 것은 무엇이 있을까요?C 전처리 기 대 C 컴파일러

+3

@Duracell : 아니요, 'CXXFLAGS'입니다. 'CPPFLAGS'는 C PreProcessor를위한 것입니다. – Thomas

+0

@ 토마스 당신이 만든 명료화가 중요합니다. CPPFLAGS 대 CXXFLAGS에 대한 오해의 소지가있는 수많은 언급이 있습니다. – Barry

답변

2

전혀 사용하지 않는다고 생각합니다.

implicit make rulesCFLAGS이 C 프로그램 (.c에서 .o)을 컴파일 할 때만 사용됨을 나타냅니다. CPPFLAGS 값은 컴파일러 명령 행에도 추가됩니다.

CPPFLAGS

은 또한 다음과 같은 규칙에 사용됩니다

  • 컴파일 C++ 프로그램
  • 컴파일 포트란 및 RATFOR 프로그램
  • 전처리 포트란 및 RATFOR 프로그램
  • 조립 및 어셈블러 프로그램을
  • 만들기 전처리 C, Yacc 또는 Lex 프로그램의 린트 라이브러리

CFLAGS이 사용되는 모든 경우에 CPPFLAGS이 사용되므로 CFLAGS-I 지시문을 추가 할 때 아무런 의미가없는 것 같습니다. 이미 CPPFLAGS에 있습니다.

물론 Makefile에 CFLAGS을 컴파일러에 전달하는 사용자 정의 규칙이 있지만 CPPFLAGS은 생략하면 다른 이야기입니다.

+1

순서는 달라질 수 있지만 적어도 GNU 기본 규칙에서는 CLPAGS가 CPPFLAGS 뒤에 추가되므로 두 디렉토리의 상대 순서를 변경하는 데 사용할 수 없습니다. 긴장 상황에서). – AProgrammer

+0

도움 주셔서 감사합니다. 내가 궁금해하는 것은 C 컴파일러가 경로 자체를 포함하여 수행하는 작업이라고 생각합니다. 컴파일러가 CPPFLAGS를 볼 수 없다고 말하자. 이 경우, 필요한 include 경로를 모른 채 barf를 사용합니까? 왜? 내가보기에는 선행 처리기가 이미 경로를 확인하고 필요한 include 파일을 포함하고 있습니다. – Sunny209

+0

그래,하지만 대부분의 경우'cc' 프로그램은 사전 처리 *와 * 컴파일을 수행합니다. 둘 중 하나를위한 별도의 프로그램이 없습니다. – Thomas

관련 문제