먼저 EXTRA_CFLAGS
은 더 이상 사용되지 않으며 ccflags-y
으로 대체됩니다. ccflags-y
의 의도는 Documentation/kbuild/makefiles.txt
, 3.7 절에서 읽을 수 있습니다.
기본적으로이 변수를 사용하면 할당 된 파일의 범위 내에서 C 컴파일 플래그 세트에 설정을 추가 할 수 있습니다. 은 자신의 메이크 파일을 넘어 글로벌 영향을 미칠 수 있기 때문에 글로벌 플래그를 변경하지 않아도됩니다. 이는 나쁜 습관으로 간주됩니다. 여러분이 언급 한 확인은 실제로 전역 플래그가 포함 된 makefile에 의해 변경되지 않았 음을 확인합니다.
ccflags-y
(이전의 EXTRA_CFLAGS
)이 빌드 프로세스에서 어떻게 사용되는지 확인하는 것은 흥미로운 일입니다. (즉,이 독자 ;-)에게 연습으로 남아 있기 때문에, 모두는 아니지만) 몇 가지 관련 사항을 추적하면 다음 보여줍니다
EXTRA_CFLAGS
여전히 사용할 수 있습니다
, scripts/Makefile.lib
1 # Backward compatibility
2 asflags-y += $(EXTRA_AFLAGS)
3 ccflags-y += $(EXTRA_CFLAGS)
같은 파일에 따라 , 약하게을 scripts/Makefile.build
에서 다음
104 orig_c_flags = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(KBUILD_SUBDIR_CCFLAGS) \
105 $(ccflags-y) $(CFLAGS_$(basetarget).o)
106 _c_flags = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(orig_c_flags))
...
133 __c_flags = $(_c_flags)
...
147 c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
148 $(__c_flags) $(modkern_cflags) \
149 -D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags)
: ccflags-y
이 (CFLAGS_<filename>.o
라고, 또한 당신이 당신의 처리에 또 다른 변수가 있음을 보여줍니다)를 C 컴파일 플래그에 종료하는 방법을 보여줍니다 ilation 규칙은 정의 :이 모든 재귀 적으로 자신의 메이크 파일을 정의 할 때 ccflags-y
의 자신의 값이 C 플래그에 삽입됩니다 것을 의미 =
하지 :=
를 사용하여, 변수를 확장됩니다
234 cmd_cc_o_c = $(CC) $(c_flags) -c -o [email protected] $<
하는 것으로.
마지막으로 약 KBUILD_NOPEDANTIC
입니다. 제목은 언급했지만 실제 질문은 아닙니다.CFLAGS
의 변경된 값이 테스트는 KBUILD_NOPEDANTIC
에게 어떤 가치를 제공하여 비활성화 할 수 있습니다 - 모든 오늘 검색된이 답변에서 참조 scripts/Makefile.build
47 ifeq ($(KBUILD_NOPEDANTIC),)
48 ifneq ("$(save-cflags)","$(CFLAGS)")
49 $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y)
50 endif
51 endif
파일을 참조하십시오.
지금이 분야의 전문가가 아니며이 전체 이야기를 작성한 후 메이크 파일을 자세히 살펴보면 내가 이해할 수없는 것이 있습니다. 빌드 시스템에서는 CFLAGS
이 사용되지 않았으며 (암시 적으로도 명시 적으로도 사용되지는 않지만) KBUILD_CFLAGS
입니다. 따라서 CFLAGS
의 변경 사항 확인이 실제로 KBUILD_CFLAGS
의 변경 사항 검사인지 확인해야합니다.
CFLAGS가 플래그라는 것을 이해한다면 커널 전체가 컴파일되므로 변경해서는 안됩니다. 이것은 커널 KBuild 시스템이 CFLAGS + EXTRA_CFLAGS로 외부 모듈을 컴파일한다는 것을 의미합니다. 옳은? – dimba
나는 그렇게 생각한다. – ugoren