Make-файлы в openwrt, разница между cp и $ (CP)?

#makefile #embedded #openwrt

#makefile #встроенные #openwrt

Вопрос:

Я следую руководству по компиляции моего собственного пакета в openwrt.

В каталоге /package/helloworld:

 .../packege/helloworld$ ls
src Makefile
.../packege/helloworld$ ls src
hello.c main.c Makefile
.../packege/helloworld$vi Makefile

#helloworld makefile
include $(TOPDIR)/rules.mk

PKG_NAME:=helloworld
PKG_RELEASE:=1
PKG_VERSION:=0.1

PKG_BUILD_DEPENDS:=

include $(INCLUDE_DIR)/package.mk

define Package/helloworld
  SECTION:=utils
  CATEGORY:=Utilities
  DEPENDS:=@TARGET_etrax
  TITLE:=Yet Another Helloworld Application
endef

define Package/helloworld/description
 This is helloworld :p
endef

define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) 
    $(TARGET_CONFIGURE_OPTS) 
    CFLAGS="$(TARGET_CFLAGS)"
endef

define Package/helloworld/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin/
endef

$(eval $(call BuildPackage,helloworld))
  

У меня есть два вопроса об этом Makefile:

  1. Я обнаружил, что есть команды, такие как mkdir, $ (CP), $ (MAKE). Я изменил $ (CP) на cp, и компиляция прошла успешно. Поэтому я не понимаю, почему эти два вида форматов существуют.

  2. Где параметры, такие как $(PKG_BUILD_DIR), $ (INSTALL_DIR), определены в openwrt? Я только что нашел место, где определен $ (TOPDIR), но не другие.

Спасибо

Ответ №1:

  1. Это не разные форматы, cp — это команда Linux, $ (CP) — это конструкция makefile для «получения значения переменной make CP«. Таким образом, в Linux он должен расширяться до cp (т. Е. Должен быть где-то инициализирован этим значением) и, скорее всего, для копирования под Windows (это зависит от конкретной настройки, поскольку cp не полностью совпадает с copy). То же самое с $ (MKDIR) и другими системными инструментами.

    1.1. $(MAKE) на самом деле другое дело — это специальная переменная make, которая расширяется, чтобы создать имя инструмента с аргументами / флагами, передаваемыми из командной строки. Читать это.

  2. Все это переменные, определяющие, где создавать и где устанавливать. Смотрите описание здесь .