"recipe commences before first target" 自行创建打开的 wrt 包的 makefile 错误

"recipe commences before first target" makefile error with self created open wrt package

我正在尝试创建我自己的名为 'azure' 的 Open WRT 包。到目前为止,我只在 package/utils/azure 目录中创建了一个 Makefile。当我尝试在 Open WRT 根目录中使用 make 构建包时,将创建一个 dump.txt 包含:
Makefile:44: *** recipe commences before first target. Stop.

我的生成文件:

include $(TOPDIR)/rules.mk

PKG_NAME:=azure
PKG_VERSION:=1.0
PKG_RELEASE:=1

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=<URL TO MY GIT REPO>
PKG_SOURCE_VERSION:=<COMMIT HASH>

HOST_BUILD_DEPENDS:=curl/host
PKG_BUILD_DEPENDS:=curl/host
include $(INCLUDE_DIR)/host-build.mk

CONFIGURE_ARGS += --recursive

include $(INCLUDE_DIR)/package.mk

define Package/azure
    SECTION:=utils
    CATEGORY:=Network
    DEPENDS:+=curl
    TITLE:=<MY TITLE>
endef

define Package/azure/description
 <DESCRIPTION>
endef

# Use CMake for building the git repo.
define Build/Compile
    #!/bin/sh
    mkdir $(PKG_BUILD_DIR)/build
    pushd $(PKG_BUILD_DIR)/build
    cmake ..
    make
    popd
endef

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

$(eval $(call BuildPackage,azure)) # <-- Line 44, the line that generates the error.

我推测它与 this 有关。由于我使用的是 Open WRT 而不是真正按照预期的方式使用,所以我不知道如何正确地重写代码。有人可以帮我吗?非常感谢:)

找到了我的问题的解决方案!

一些错误:

  1. curllibcurl有区别。应该改用 libcurl
  2. PKG_BUILD_DIR 未定义。提前获取源文件比在 Makefile 中使用 git 更容易。当克隆或复制源文件时,很清楚 PKG_BUILD_DIR 会是什么。

我完全重写了 Makefile 并添加了一个 define Build/Configure 部分。我假设用于(交叉)编译和链接的工具应该已经在本节中定义,以便开始编译过程。例如,CXX 编译器的定义为:

CXX="$(TOOLCHAIN_DIR)/bin/$(TARGET_CROSS)g++"

另一个好的做法是使用绝对路径而不是相对路径来定义目录。