OpenWrt USE_SOURCE_DIR的作用

文章介绍了OpenWrt中USE_SOURCE_DIR的作用,它允许在编译package时直接使用源代码目录,避免了每次修改代码都需要clean后再编译的繁琐,提高了调试效率。Makefile中的设置确保了源代码的正确链接和管理。
摘要由CSDN通过智能技术生成

一. 前言

        我们都知道,OpenWrt在编译某个package时,默认情况下,会将package的源码拷贝到PKG_BUILD_DIR变量所在的路径下,然后再对package进行编译。这样其实会造成一点麻烦,就是不方便直接调试代码,如下面这种情况:

        比如我在package目录下有helloworld的package,下面有个src目录下有许多文件,并且已经建立好了代码工程,如下:

package
    |__helloworld
            |__src
            |   |__a.c
            |   |__b.c
            |   |__c.c
            |   .......
            |
            |__Makefile

          我们每次make package/helloworld/compile时,PKG_BUILD_DIR将会是这个代码的副本,当我们想要修改代码时,必须clean后,再运行compile,这样很麻烦,降低了调试的效率。

        于是USE_SOURCE_DIR就产生了,USE_SOURCE_DIR表示源代码的路径,这个例子就是openwrt/package/helloworld,PKG_BUILD_DIR会直接软链接到USE_SOURCE_DIR,这样编辑和编译使用的都是一套代码了。

二. Makefile分析

        看一下定义了USB_SOURCE_DIR后,处理会有什么不同,看include/package.mk文件,如下:

ifdef USE_SOURCE_DIR
  define Build/Prepare/Default
	rm -rf $(PKG_BUILD_DIR)
	$(if $(wildcard $(USE_SOURCE_DIR)/*),,@echo "Error: USE_SOURCE_DIR=$(USE_SOURCE_DIR) path not found"; false)
	ln -snf $(USE_SOURCE_DIR) $(PKG_BUILD_DIR)
	touch $(PKG_BUILD_DIR)/.source_dir
  endef
endif

        可以看到Build/Prepare/Default的定义改变了,首先,删除PKG_SOURCE_DIR目录,然后判断USB_SOURCE_DIR下是否有文件,没有则报错,有则将PKG_SOURCE_DIR链接到USB_SOURCE_DIR,最后创建$(PKG_BUILD_DIR)/.source_dir文件。

注意:使用了USB_SOURCE_DIR变量,Makefile中就不需要再定义Build/Prepare了,尤其是在其中定义了拷贝文件的命令,这样可能造成冲突。

三. 总结

        本文解释了USB_SOURCE_DIR的作用:方便对package源码的修改和调试。并对其机制进行了简单的分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值