0

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 について 2 つの質問があります。

  1. mkdir、$(CP)、$(MAKE) などのコマンドがあることがわかりました。$(CP) を cp に変更したところ、コンパイルがうまくいきました。したがって、これら 2 種類の形式が存在する理由がわかりません。

  2. $(PKG_BUILD_DIR)、$(INSTALL_DIR) などのパラメータは openwrt で定義されていますか? $(TOPDIR) が定義されている場所を見つけましたが、他の場所は見つかりませんでした。

ありがとう

4

1 に答える 1

2
  1. これらは形式の違いではなく、cpLinux コマンド、$(CP) は「make 変数CPの値を取得する」ための makefile 構造です。したがって、Linux ではcpに展開する必要があり (つまり、どこかでこの値で初期化する必要があります)、ほとんどの場合、Windows では をコピーします ( cpはcopyと完全に同じではないため、これはすべて特定のセットアップに依存します)。$(MKDIR) やその他のシステムツールも同様です。

    1.1。$(MAKE) は実際には別のものです。これは、コマンド ラインから渡された引数/フラグを使用してツール名を作成するように展開される特別な make 変数です。これを読んでください。

  2. これらはすべて、ビルドする場所とインストールする場所を制御する変数です。こちらの説明を参照してください。

于 2011-11-01T14:38:34.780 に答える