2012-04-26 2 views
13

나는의 CFLAGS에서 찾고 있어요 -g ++ -D 플래그는 무엇을합니까?

CFLAGS=-g -w -D LINUX -O3 -fpermissive 

을 메이크에서. -D 플래그는 무엇을합니까? 나는 그 남자 페이지에서 그 내용을 보았습니다.

-D name 
    Predefine name as a macro, with definition 1. 

그러나 나는 그것을 어떻게 해석 해야할지 모르겠습니다. 내 해석은 리눅스를 매크로로 만들고 오직 리눅스 환경에서만 -03과 -fpermissive를하는 것이다. 그게 맞습니까? 그렇지 않다면, 뭘? 어떤 도움 주셔서 감사합니다

+3

종종 '-D'는 다음과 같은 (정의 된) 이름에 붙어 있습니다. '-DLINUX' 또는'-DFOO = BAR' –

답변

19

이것은 컴파일되고있는 파일의 소스 코드에 문 #define LINUX 1을 추가하는 것과 같습니다. 다른 컴파일 플래그에는 영향을주지 않습니다. 그 이유는 코드에서 #ifdef 문을 사용하는 쉬운 방법입니다. 당신이 코드를 가질 수 있도록 말한다 : 그 매크로는 -D 플래그를 제어 할 수있는 활성화 된 경우에만 활성화됩니다

#ifdef LINUX 
    foo; 
#endif 

. 따라서 소스 파일을 편집하지 않고 컴파일 할 때 조건부 컴파일 문을 활성화/비활성화하는 쉬운 방법입니다.

+0

+1 하겠지만, 해석은 한 점까지만 정확합니다. '-D' 플래그는 다음 플래그에 영향을 미치지 않습니다 (예 : 조건부 또는 일부 미친 말하기). 이는 상당히 중요한 차이입니다. – jpm

+0

@jpm 그것은 내가 처음 읽었을 때와 같은 방식으로 질문을 해석하지 않은 좋은 점이지만, 이제는 당신이 옳았다는 것을 알 수 있습니다. 나는 그 점을 명확히하기 위해 나의 대답을 편집했다. –

3

-O3과 아무 관련이 없습니다. 기본적으로 컴파일 된 파일의 시작 부분에

#define LINUX 1 

과 같은 의미입니다.

+0

그렇다면 -03은 무엇입니까? – Sterling

+1

'-O3'은 컴파일러의 최적화 레벨을 3으로 설정합니다. – jpm

관련 문제