it-swarm-ko.tech

makefiles CFLAGS

Tinyos를 배우는 과정에서 나는 makefile에 대해 전혀 단서가 없다는 것을 발견했습니다.

전 처리기 변수를 선언하는 데 사용할 수있는 선택적 컴파일 타임 기능이 많이 있습니다.

그것들을 사용하려면 다음과 같은 일을해야합니다.

CFLAGS="-DPACKET_LINK" 특정 기능을 사용하도록 설정합니다.

CFLAGS="-DPACKET_LINK" "-DLOW_POWER"는 두 가지 기능을 활성화합니다.

누군가 나를 위해이 선을 해부하고 무슨 일이 있는지 말해 줄 수 있습니까? tinyos가 아니라 makefile의 관점에서!

21
Michael

CFLAGS는 컴파일러에 인수를 추가하는 데 가장 일반적으로 사용되는 변수입니다. 이 경우 매크로를 정의합니다.

따라서 -DPACKET_LINK#define PACKET_LINK 1를 프로젝트의 모든 .c 및 .h 파일의 맨 위에 두는 것과 같습니다. 대부분의 경우 프로젝트 내에 이러한 매크로가 정의되어 있고 그에 따라 무언가를 수행하는 코드가 있습니다.

#ifdef PACKET_LINK
// This code will be ignored if PACKET_LINK is not defined
do_packet_link_stuff();
#endif

#ifdef LOW_POWER
// This code will be ignored if LOW_POWER is not defined    
handle_powersaving_functions();
#endif

Makefile을 자세히 살펴보면 $(CFLAGS)이 다음과 같이 사용 된 것을 볼 수 있습니다.

$(CC) $(CFLAGS) ...some-more-arguments...
24
Isak Savo

Makefile 어딘가에서 CFLAG는 다음과 같이 컴파일 라인에서 사용됩니다 :
$(CC) $(CFLAGS) $(C_INCLUDES) $<

결국에는 실행으로 다음과 같이 변환됩니다.

gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o

이 정의는 헤더 파일에서 정의 된대로 소스 코드로 전달됩니다.

8
Ilya

-D 옵션은 전 처리기 변수를 설정하므로 사용자의 경우 지정된 "#ifdef/#endif"블록에있는 모든 코드가 컴파일됩니다.

즉.

#ifdef PACKET_LINK
/* whatever code here */
#endif

CFLAGS는 makefile에서 사용되는 변수로, 컴파일러가 호출 될 때 내용으로 확장됩니다.

예 :.

gcc $(CFLAGS) source.c
3
Jonas Gulle

-D는 적어도 define (gcc)을 나타내며, 어딘가에서 파일 대신 명령 줄에서 #define을 허용합니다. 일반적으로 디버깅 코드를 활성화하거나 비활성화하는 -DDEBUG 또는 -DNDEBUG가 있습니다.

1
Flame

이것의 완전성을 위해-Microsoft의 nmake 유틸리티를 사용하는 경우 nmake에는 C/C++ 파일 컴파일과 같은 일부 기본값이 있기 때문에 실제로 makefile에 사용 된 $ (CFLAGS) 매크로가 표시되지 않을 수 있습니다. 무엇보다도 다음은 nmake에 미리 정의되어 있습니다 (GNU Make가 이와 같은 작업을 수행하는지 확실하지 않습니다) .Windows의 작동하는 makefile에서 볼 수 없습니다.

.c.exe:
    commands:          $(CC) $(CFLAGS) $<

.c.obj:
    commands:          $(CC) $(CFLAGS) /c $<

.cpp.exe:
    commands:          $(CXX) $(CXXFLAGS) $<

.cpp.obj:
    commands:          $(CXX) $(CXXFLAGS) /c $<
1
Michael Burr

Make Mr. Make가 Makefile 팁에 대한 훌륭한 참고 자료라는 것을 알았습니다.

http://www.cmcrossroads.com/content/category/8/147/268/

0
Michael McCarty