Makefiles в openwrt, разница между cp и $ (CP)? - PullRequest
0 голосов
/ 28 октября 2011

Я следую инструкциям по компиляции моего собственного пакета в 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 Ответ

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

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

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

...