"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 而不是真正按照预期的方式使用,所以我不知道如何正确地重写代码。有人可以帮我吗?非常感谢:)
找到了我的问题的解决方案!
一些错误:
curl
和libcurl
有区别。应该改用 libcurl
。
PKG_BUILD_DIR
未定义。提前获取源文件比在 Makefile 中使用 git 更容易。当克隆或复制源文件时,很清楚 PKG_BUILD_DIR
会是什么。
我完全重写了 Makefile 并添加了一个 define Build/Configure
部分。我假设用于(交叉)编译和链接的工具应该已经在本节中定义,以便开始编译过程。例如,CXX 编译器的定义为:
CXX="$(TOOLCHAIN_DIR)/bin/$(TARGET_CROSS)g++"
另一个好的做法是使用绝对路径而不是相对路径来定义目录。
我正在尝试创建我自己的名为 '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 而不是真正按照预期的方式使用,所以我不知道如何正确地重写代码。有人可以帮我吗?非常感谢:)
找到了我的问题的解决方案!
一些错误:
curl
和libcurl
有区别。应该改用libcurl
。PKG_BUILD_DIR
未定义。提前获取源文件比在 Makefile 中使用 git 更容易。当克隆或复制源文件时,很清楚PKG_BUILD_DIR
会是什么。
我完全重写了 Makefile 并添加了一个 define Build/Configure
部分。我假设用于(交叉)编译和链接的工具应该已经在本节中定义,以便开始编译过程。例如,CXX 编译器的定义为:
CXX="$(TOOLCHAIN_DIR)/bin/$(TARGET_CROSS)g++"
另一个好的做法是使用绝对路径而不是相对路径来定义目录。