ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

(Èý)openwrtÖ÷Makefile½âÎö(Ò»)
2017-10-11 16:49:13 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:3490´Î
Tags£ºopenwrt Makefile ½âÎö

±¾ÖܳÉÅÖ×ÓÿÖÜÒ»²©µ½Á˵ÚËÄÖÜ^_^

Ç°ÑÔ

ǰһƪ,ÎÒÃÇ´ó¸ÅÃèÊöÁËÕû¸ö¾µÏñÎļþµÄÉú³É¹ý³Ì.±¾ÖÜÎÒÃÇÀ´½âÎöÖ÷Makefile,¿´¿´Ö÷Òª±àÒë¹ý³ÌÊÇÔõô²úÉúµÄ.

Ö÷Makefile½á¹¹

ÎÒÃÇÒÔchaos calmerµÄ´úÂëΪÀý,Õû¸ö±àÒëµÄÈë¿ÚÊÇÔÚÔ´Âë¸ùĿ¼ÏµÄMakefile.±àÒëµÄ¸÷ÖÖÃüÁӦ¸ÃÔÚÔ´Âë¸ùĿ¼Ï¼üÈë.
Õû¸öÖ÷MakefileµÄ½á¹¹ÈçÏÂ:

world:
ifneq ($(OPENWRT_BUILD),1)
    ¶¥²ã
else
    µÚ¶þ²ã
endif

¿ªÊ¼²¿·ÖÊÇһЩעÊͺͱäÁ¿¶¨Ò弰·¾¶¼ì²é.
¸ù¾ÝMakefileµÄ¹æÔò,ÔÚûÓÐÖ¸¶¨±àÒëÄ¿±êµÄʱºò,MakefileÖеĵÚÒ»¸öÄ¿±ê½«×÷ΪĬÈÏÄ¿±ê.
»»¾ä»°Ëµ,µ±ÎÒÃÇÖ´ÐÐmake V=sʱ,Õâ¸öʱºò±àÒëµÄÄ¿±ê¾ÍÊÇworld.ºÍÎÒÃÇÖ´ÐÐmake world V=sЧ¹ûÊÇÒ»ÑùµÄ.

¶¥²ã

ͨ³£ÔÚ±àÒëʱ,ÎÒÃDz»»á¶¨Òå±äÁ¿OPENWRT_BUILDµÄÖµ,ËùÒÔͨ³£ÎÒÃÇÊÇ»á×ßµ½¶¥²ãµÄ.
¶¥²ã´úÂëÈçÏÂ:

  _SINGLE=export MAKEFLAGS=$(space);

  override OPENWRT_BUILD=1
  export OPENWRT_BUILD
  GREP_OPTIONS=
  export GREP_OPTIONS
  include $(TOPDIR)/include/debug.mk
  include $(TOPDIR)/include/depends.mk
  include $(TOPDIR)/include/toplevel.mk

ÕâÀïÎÒÃÇ¿´µ½±äÁ¿OPENWRT_BUILD±»ÖÃΪ1.È»ºó°üº¬ÁË3¸ö.mkÎļþ.
ÕâÀïÉÔ΢½âÊÍÏÂ.mkÎļþ.ËüÃÇÒ»°ãûÓÐʲôִÐж¯×÷,¶¼ÊÇһЩ±äÁ¿µÄ¶¨Ò廹ÓÐÒÀÀµ¹ØϵµÄ˵Ã÷.¿ÉÒÔÀà±ÈÓÚCÓïÑÔµÄÍ·ÎļþÀ´Àí½â.

debug.mk:

¿ÉÒÔͨ¹ý¶¨ÒåDEBUGµÄÖµÀ´¿ØÖƱàÒë¹ý³Ì

depends.mk

Ö÷Òª¶¨ÒåÁËrdepÕâ¸ö±äÁ¿

toplevel.mk

Õâ¸öÊÇÎÒÃǸú×Ù±àÒë¹ý³ÌµÄÖØÒªµÄÎļþ.Õâ¸öÎļþÔÚÔ´Âë¸ùĿ¼ÏµÄincludeÎļþ¼ÐÏÂ.

ºËÐÄ´úÂëÈçÏÂ:

%::
    @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
    @( \
        cp .config tmp/.config; \
        ./scripts/config/conf --defconfig=tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \
        if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \
            printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
        fi \
    )
    @+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
        printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \
        false; \
    } )

³ýÁËÉÙÊýÔÚtoplevelÖỶ¨ÒåµÄÄ¿±êÍâ,ÆäËû±àÒëÄ¿±ê¶¼»á×ßµ½ÕâÀï.½«Ö®¼ò»¯ºó:

%::
    make prereq
    make $@

Ê×ÏÈÖ´ÐÐprereq,È»ºóÔÙÖ´ÐÐÎÒÃÇÖ¸¶¨µÄÄ¿±ê»òÕßĬÈÏÄ¿±êworld.
prereqÕûÀíºóµÄÒÀÀµ¹ØϵÈçÏÂ:
prereq
ÆäÖÐ
staging_dir/host/.prereq-build:

½«»áÖ´ÐÐһϵÁÐÖ÷»ú¼ì²é,ÊÇ·ñ°²×°Á˱ØÒªµÄÈí¼þ.

prepare-tmpinfo:

¸ù¾Ýscan.mk,ɨÃètarget/linuxºÍpackageĿ¼,Éú³ÉpackageinfoºÍtargetinfo.

×ÜÖ®,¶¥²ãÍê³ÉһϵÁбØÒªµÄ×¼±¸¹¤×÷.¶ÔÓÚ¾ø´ó¶àÊýµÄÄ¿±ê¶øÑÔ,¶¥²ãÊDZؾ­Ö®Â·.µ±È»,ÔÚtoplevel.mkÖÐ,ÎÒÃÇÒ²¿ÉÒÔ¿´µ½Ä¿±êmenuconfig.Ò²¾ÍÊÇ˵¶ÔÓÚÄ¿±êmenuconfig¶øÑÔ,½«²»»áÖ´Ðе½µÚ¶þ²ãµÄÂß¼­.

µÚ¶þ²ã

ÔÚÉÏÃæÖ´ÐÐÍêmake prereqÖ®ºó,½«Ö´ÐÐmake world.
»¹¼ÇµÃÎÒÃǽøÈ붥²ãºóÐÞ¸ÄÁ˱äÁ¿OPENWRT_BUILDô?µ±ÔÙ´ÎÖ´ÐÐmake worldµÄʱºò,ÓÉÓÚÌõ¼þ²»Âú×ã,ÎÒÃǽ«Ö±½Ó½øÈëµÚ¶þ²ãÀ´Ö´ÐÐ.

  include rules.mk
  include $(INCLUDE_DIR)/depends.mk
  include $(INCLUDE_DIR)/subdir.mk
  include target/Makefile
  include package/Makefile
  include tools/Makefile
  include toolchain/Makefile

rules.mk:

ºÜÖØÒªµÄÒ»¸ömkÎļþ,ÆäÖй涨Á˺ܶàÓÐÓõıäÁ¿,°üÀ¨¸÷ÖÖĿ¼·¾¶µÄ¶¨Òå,½»²æ±àÒëÆ÷µÈµÈ.ÆäÖÐ

ifeq ($(DUMP),)
  -include $(TOPDIR)/.config
endif

¾ÍÊÇ°üº¬ÁËÎÒÃǵÄÅäÖÃÎļþ.¶ÔÓÚMakefile¶øÑÔ,.configÎļþ¾ÍÊÇÒ»´ó´®±äÁ¿µÄ¶¨Òå.Makefile¿ÉÒÔÖ±½Ó¶ÁÈ¡ÕâЩ¶¨Òå,´Ó¶ø¿ØÖƱàÒë¹ý³Ì.

subdir.mk:

Õâ¸öÊǶÁ¶®ÎÒÃÇÕû¸ö±àÒë¹ý³ÌµÄ¹Ø¼üËùÔÚ,ÆäÖÐÖ÷Òª¶¨ÒåÁËÁ½¸öº¯Êý:subdirºÍstampfile,ÎÒÃÇÉÔºó¼ÓÒÔ½âÊÍ.

½ÓÏÂÀ´,°üº¬ÁË4¸öMakefileÎļþ.ÎÒÃÇÒÔtarget/MakefileΪÀý.¸ÃÎļþλÓÚtargetĿ¼ÏÂ.
ºËÐIJ¿·ÖΪ:

$(eva l $(call stampfile,$(curdir),target,prereq,.config))
$(eva l $(call stampfile,$(curdir),target,compile,$(TMP_DIR)/.build))
$(eva l $(call stampfile,$(curdir),target,install,$(TMP_DIR)/.build))

$(eva l $(call subdir,$(curdir)))

ÕâÀïµ÷ÓÃÁËsubdir.mkÖж¨ÒåµÄstampfileº¯Êý.½«»áÉú³Étarget/stamp-prereq,target/stamp-compile,target/stamp-installÈý¸ö±äÁ¿.
ÒÔtarget/stamp-prereqΪÀý,Ö´Ðв¿·ÖΪmake target/prereq.ͬÀítarget/stamp-compile,Ö´Ðв¿·ÖΪmake target/compile.

×îºóÓÖµ÷ÓÃÁËsbudirº¯Êý,Õâ¸öº¯Êý¹æ¶¨ÁËÄ¿±êºÍ¸÷×ÓÎļþ¼ÐÖ®¼äµÄÒÀÀµ¹Øϵ.Èç¹ûÓÐÒ»¶¨µÄMakefile»ù´¡¿ÉÒÔÈ¥¶Á¶Ásubdir.mkÎļþ.
¾ÙÀý¶øÑÔ¾ÍÊÇ:

µ±Ö´ÐÐÄ¿±êΪtarget/compile,Õâ¸öÄ¿±ê½«ÒÀÀµÓÚtarget/linux/compile.
µ±Ö´ÐÐÄ¿±êΪpackage/compile,Õâ¸öÄ¿±ê½«ÒÀÀµÓÚ

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£ºOpenGL ESÖ®GLFW´°¿Ú´î½¨ ÏÂһƪ£ºBeaglebone Black¨CGPIO ¸ßµÍµçÆ..

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿