Роль OpenWrt USE_SOURCE_DIR

Введение

        Все мы знаем, что когда OpenWrt компилирует пакет, по умолчанию он копирует исходный код пакета в путь, где находится переменная PKG_BUILD_DIR, а затем компилирует пакет. На самом деле это вызовет небольшие проблемы, то есть неудобно отлаживать код напрямую, например, в следующей ситуации:

        Например, у меня есть пакет helloworld в каталоге пакета. В каталоге src ниже находится много файлов, и проект кода был установлен следующим образом:

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

          Каждый раз, когда мы делаем package/helloworld/compile, PKG_BUILD_DIR будет копией этого кода. Когда мы хотим изменить код, мы должны очистить его, а затем запустить компиляцию. Это очень хлопотно и снижает эффективность отладки.

        Таким образом генерируется USE_SOURCE_DIR. USE_SOURCE_DIR представляет путь к исходному коду. Этот пример — openwrt/package/helloworld. PKG_BUILD_DIR будет напрямую связан с USE_SOURCE_DIR, так что редактирование и компиляция используют один набор кодов.

2. Анализ 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, нет необходимости определять Build/Prepare в Makefile, особенно если в нем определена команда копирования файлов, что может вызвать конфликты.

3. Резюме

        В этой статье объясняется роль USB_SOURCE_DIR: облегчить модификацию и отладку исходного кода пакета. И был проведен простой анализ его механизма.

Guess you like

Origin blog.csdn.net/to_be_better_wen/article/details/132637923