linux各级目录下的Makefile和Kconfig文件小结

本文总结了Linux各级目录下的Makefile和Kconfig文件的作用和使用。package目录下的Makefile涉及BuildPackage和KernelPackage变量,用于构建和打包;src目录下Makefile处理编译源码;usr目录下Makefile涉及链接器选项;kern目录下的Kconfig文件构成内核配置数据库。Kconfig文件通过menu、config等关键字定义内核配置选项,Makefile则配合完成编译过程。
摘要由CSDN通过智能技术生成

各级目录下的Makefile和Kconfig文件小结

代码目录

├── Makefile
├── files
│   ├── etc
│   └── usr
└── src
    ├── Makefile
    ├── kern
    └── usr

files目录下的文件是编译时只要拷贝到指定目录下的脚本或是文件src目录下是需要进行编译的源码,kern目录下是内核源码,usr目录下是用户态代码

1. package目录下makefile

.
├── Makefile
├── files
└── src

makefile文件末尾有两行:

$(eval $(call BuildPackage,$(PKG_NAME)))
$(eval $(call KernelPackage,$(PKG_NAME)))

$(eval <text>)是将<text> 作为Makefile文件中的一部分。

这里引用BuildPackageKernelPackage变量中的内容并将内部的$(1)替换为$(PKG_NAME),然后将处理后的内部作为Makefile中的一部分。

BuildPackage 变量定义在 include/package.mk 文件中。

BuildPackage 变量

  • 语法简介

$() #表示要执行的一条语句
$(if 条件, 成立执行, 失败执行)        #if条件分支
$(foreach 变量, 成员列表, 执行体)   #成员遍历语句,语句是可以嵌套使用的。
$(N)  #表示第N个参数

BuildPackage 变量定义

define BuildPackage
  $(Build/IncludeOverlay)
  $(eval $(Package/Default))    #定义在package-defaults.mk文件里
  $(eval $(Package/$(1)))       #调用用户自定义的 Package/<包名> 宏
​
  ifdef DESCRIPTION
    $$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)
  endif
​
  #检查有没有定义 Package/<包名>/description宏,如果没有定义,则以TITLE默认定义一个
  ifndef Package/$(1)/description
    define Package/$(1)/description
      $(TITLE)
    endef
  endif
​
  BUILD_PACKAGES += $(1)
  #查找DEPENDS,依赖库
  $(STAMP_PREPARED): $$(if $(QUILT)$(DUMP),,$(call find_library_dependencies,$(DEPENDS)))
​
  #检查 TITLE, CATEGORY, SECTION, VERSION 是否定义,如果没有定义则报错
  $(foreach FIELD, TITLE CATEGORY SECTION VERSION,
    ifeq ($($(FIELD)),)
      $$(error Package/$(1) is missing the $(FIELD) field)
    endif
  )
​
  #如果有定义DUMP,那就引入Dumpinfo/Package宏的内部。
  #如果没有,那么就引用 Packaget/<包名>/targets里面的每一个target
  #如果没有定义Package/<包名>/targets宏,那么将PKG_TARGETS里的每个target取出来,
  #如果也没有定义PKG_TARGETS,那就默认ipkg作为target。将每一个target,引用 BuildTarget/$(target)。
  $(if $(DUMP), \
    $(Dumpinfo/Package), \
    $(foreach target, \
      $(if $(Package/$(1)/targets),$(Package/$(1)/targets), \
        $
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值