CFLAGS 대 CPPFLAGS
CFLAGS (또는 C ++의 경우 CXXFLAGS)는 컴파일러 용이고 CPPFLAGS는 전 처리기를 사용하는 것을 이해합니다.
그러나 나는 여전히 그 차이를 이해하지 않는다.
#include에 포함 된 헤더 파일에 대한 포함 경로를 지정해야합니다. #include는 전 처리기 지시문이기 때문에 전 처리기 (CPPFLAGS) 만 제가 신경 쓰는 것입니까?
어떤 상황에서 컴파일러에 추가 포함 경로를 제공해야합니까?
일반적으로 전처리 기가 필요한 헤더 파일을 찾아 포함하는 경우 디렉토리에 대해 알려야하는 이유는 무엇입니까? CFLAGS는 어떤 용도로 사용됩니까?
(제 경우 에는 두 가지 가 모두 프로그램을 사용할 수있게하여 혼란을 가중 수정 ... CFLAGS 또는 CPPFLAGS를 사용 하여 목표를 달성 할 수 있습니다 (적어도 autoconf에서). 무엇을 제공합니까?)
C 프로그램을 준비하기위한 암시 적 make 규칙은 다음과 적응합니다.
%.o:%.c
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
여기서 $()
구 변수를 확장한다. CPPFLAGS
및 둘 다 CFLAGS
컴파일러 호출에서 사용하는 것 포함 경로를 정의하는 데 사용하는 것은 개인적인 취향의 문제입니다. 를 들어이 예 foo.c
파일이 현재 디렉토리에 난 웬지 -
make foo.o CPPFLAGS="-I/usr/include"
make foo.o CFLAGS="-I/usr/include"
둘 다 정확히 같은 방식으로 컴파일러를 호출합니다.
gcc -I/usr/include -c -o foo.o foo.c
같은 필요한 여러 언어가 경로를 포함 할 때 둘 사이의 차이는 활동하기 시작, 예를 들어 당신이 경우 bar.cpp
다음 시도
make bar.o CPPFLAGS="-I/usr/include"
make bar.o CFLAGS="-I/usr/include"
그런 다음 편집은
g++ -I/usr/include -c -o bar.o bar.cpp
g++ -c -o bar.o bar.cpp
C ++ 암시 적 규칙도 CPPFLAGS
변수를 사용하는 방법
이 차이는 당신에게 사용을위한 좋은 가이드를합니다-당신은 모든 언어를 넣어 플래그를 사용하려는 경우 CPPFLAGS
, 그것은 특정 언어에 대한의에 넣어 경우 CFLAGS
, CXXFLAGS
등 후자의 예는 표준 준수 또는 경고 플래그를 포함합니다 -std=c99
-C ++ 컴파일러 에 전달하고 싶지 않을 것입니다 !
그런 다음 makefile에서 이와 같은 결과를 얻을 수 있습니다.
CPPFLAGS=-I/usr/include
CFLAGS=-std=c99
CXXFLAGS=-Weffc++
CPPFLAGS
매크로를 지정하는 데 사용할 수있는 하나의 디렉토리 입니다 #include
.
모두 CPPFLAGS
와 CFLAGS
귀하의 경우 작업 때문에 make
(1) 규칙은 전처리 및 (모두 매크로 명령에 사용) 하나의 명령으로 선택을 결합합니다.
.
양식을 사용하는 경우 include-directory 로 필요가 없습니다 #include "..."
. 또한 표준 컴파일러 포함를 필요가 없습니다. 다른 모든 include- 디렉토리를 지정해야합니다.
당신은 암시 적을 규칙을 따르고 있습니다.
참고 URL : https://stackoverflow.com/questions/2754966/cflags-vs-cppflags
'IT' 카테고리의 다른 글
Collections.emptyList ()와 Collections.EMPTY_LIST의 차이점은 무엇입니까? (0) | 2020.09.01 |
---|---|
((a + (b & 255)) & 255)는 ((a + b) & 255)와 같은가요? (0) | 2020.09.01 |
jquery, 클래스별로 다음 요소 찾기 (0) | 2020.09.01 |
iOS 배포 용 P12 인증서를 만드는 방법 (0) | 2020.08.31 |
$ _POST로 제공되는 경우 (0) | 2020.08.31 |