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++