나는 보통 “make command line”에서 “makefile”옵션을 사용하여 매크로 정의를 전달합니다 : -Dname = value. 정의는 makefile 내에서 액세스 할 수 있습니다.
또한 유사한 컴파일러 옵션을 사용하여 “makefile”의 매크로 정의를 “소스 코드”로 전달합니다. -Dname = value (많은 컴파일러에서 지원됨). 이 정의는 소스 코드에서 액세스 할 수 있습니다.
지금 필요한 것은 makefile의 사용자가 makefile에서 아무것도 변경하지 않고도 “make.exe 명령 줄”에서 “소스 코드”로 임의의 매크로 정의를 즉시 전달할 수 있도록하는 것입니다.
따라서 사용자는 다음을 입력 할 수 있습니다. make -f mymakefile.mk -SOMEOPTION var = 5
그런 다음 코드 main.c에서 var를 볼 수 있습니다.
int main()
{
int i = var;
}
답변
다음과 같이 make
명령을 호출 하십시오.
make CFLAGS=-Dvar=42
그리고 $(CFLAGS)
Makefile의 컴파일 명령에서 사용하십시오 . @ jørgensen이 언급했듯이 make
명령 뒤에 변수 할당을 넣으면 CFLAGS
Makefile에 이미 정의 된 값 이 재정의됩니다 .
또는 -Dvar=42
다른 변수에 설정 CFLAGS
한 다음이 변수를 다시 사용 CFLAGS
하여 완전히 재정의하는 것을 방지 할 수 CFLAGS
있습니다.
답변
이를 위해 특정 변수를 사용하십시오.
$ cat Makefile
all:
echo foo | gcc $(USER_DEFINES) -E -xc -
$ make USER_DEFINES="-Dfoo=one"
echo foo | gcc -Dfoo=one -E -xc -
...
one
$ make USER_DEFINES="-Dfoo=bar"
echo foo | gcc -Dfoo=bar -E -xc -
...
bar
$ make
echo foo | gcc -E -xc -
...
foo
답변
이쪽 으로 전화
make CFLAGS=-Dvar=42
환경뿐만 아니라 Makefile의 CFLAGS를 재정의하기를 원하기 때문입니다 (Makefile 변수와 관련하여 우선 순위가 낮음).
답변
평판이 낮기 때문에 받아 들여진 답변에 대해 언급 할 수 없습니다.
미리 정의 된 변수를 언급하고 싶습니다 CPPFLAGS
. GNU Make 매뉴얼에 다음과 같이 설명되어 있으므로 CFLAGS
또는 보다 더 잘 맞을 수 있습니다 .CXXFLAGS
C 전 처리기 및이를 사용하는 프로그램 (C 및 Fortran 컴파일러)에 제공 할 추가 플래그.
사용하는 기본 제공 암시 적 규칙의 예 CPPFLAGS
n.o
n.c
다음 형식의 레시피 를 사용하여 자동으로 생성됩니다 .$(CC) $(CPPFLAGS) $(CFLAGS) -c
n.o
n.cc
,n.cpp
에서 또는n.C
다음 형식의 레시피를 사용하여 자동으로 만들어집니다 .$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
하나는 명령 make CPPFLAGS=-Dvar=123
을 사용하여 원하는 매크로를 정의합니다.
더 많은 정보
답변
$ 고양이 x.mak 모두: 에코 $ (옵션) $ make -f x.mak 'OPTION = -DPASSTOC = 42' 에코 -DPASSTOC = 42 -DPASSTOC = 42
답변
요구 사항을 충족하기 위해 아래에서 C 파일 및 Makefile 구현을 찾으십시오.
foo.c
main ()
{
int a = MAKE_DEFINE;
printf ("MAKE_DEFINE value:%d\n", a);
}
Makefile
all:
gcc -DMAKE_DEFINE=11 foo.c