我正在学习在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有两个问题:
我发现有命令,例如mkdir,$(CP),$(MAKE)。我将$(CP)更改为cp,编译顺利。所以我不明白为什么会出现这两种格式。
在openwrt中定义参数,例如$(PKG_BUILD_DIR),$(INSTALL_DIR)?我刚刚找到了定义$(TOPDIR)而不是其他地方的地方。
由于
答案 0 :(得分:2)
这些不是不同类型的格式, cp 是Linux command,$(CP)是“获取make变量的值 CP的makefile构造强>”。因此,在Linux下它应该扩展到 cp (即应该在某个地方用这个值初始化),并且最有可能在Windows下复制(这是所有特定的设置 - 依赖,因为 cp 与 copy 不完全相同。与$(MKDIR)和其他系统工具相同。
1.1。 $(MAKE)实际上是另一回事 - 这是一个特殊的make变量,它扩展为使用从命令行传递的参数/标志来创建工具名称。阅读this。
这些都是控制构建位置和安装位置的变量。请参阅说明here。