在openwrt中makefile,cp和$(CP)之间的区别?

时间:2011-10-27 21:15:57

标签: makefile embedded 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. 在openwrt中定义参数,例如$(PKG_BUILD_DIR),$(INSTALL_DIR)?我刚刚找到了定义$(TOPDIR)而不是其他地方的地方。

  3. 由于

1 个答案:

答案 0 :(得分:2)

  1. 这些不是不同类型的格式, cp Linux command,$(CP)是“获取make变量的值 CP的makefile构造”。因此,在Linux下它应该扩展到 cp (即应该在某个地方用这个值初始化),并且最有可能在Windows下复制(这是所有特定的设置 - 依赖,因为 cp copy 不完全相同。与$(MKDIR)和其他系统工具相同。

    1.1。 $(MAKE)实际上是另一回事 - 这是一个特殊的make变量,它扩展为使用从命令行传递的参数/标志来创建工具名称。阅读this

  2. 这些都是控制构建位置和安装位置的变量。请参阅说明here