$(eval $(generic-package)) 什么意思
时间: 2023-12-04 14:04:48 浏览: 195
`$(eval $(generic-package))` 是Buildroot中用于定义通用软件包的宏。它指示Buildroot使用通用软件包规则来生成软件包的构建规则。
在Buildroot中,软件包的构建规则通常是通过定义一系列变量和规则来完成的。为了避免重复编写相似的构建规则,Buildroot提供了一些通用宏,可以简化软件包的定义和构建过程。
`$(generic-package)` 是一个通用软件包宏的名称,它会展开为一组变量和规则。通过使用`$(eval ...)`,将这个宏的展开结果插入到Makefile中。
具体而言,`$(eval $(generic-package))` 是用于在Makefile中动态生成通用软件包规则的语法。它会将通用软件包的变量和规则添加到当前Makefile中,以便构建指定的软件包。
请注意,`$(eval ...)` 是Makefile中的一个内置函数,用于在Makefile解析过程中执行一段代码,并将其结果插入到Makefile中。在这种情况下,它将`$(generic-package)`的展开结果插入到Makefile中。
相关问题
在mk文件中$(eval $(cmake-package))是做什么用的
在 Makefile 中,`$(eval $(cmake-package))` 是用来生成 CMake 构建系统的 Makefile 规则的。
`cmake-package` 宏定义了如下的规则:
```
define cmake-package
$(1)_CMAKE_OPTIONS := \
-DCMAKE_TOOLCHAIN_FILE=$(TOPDIR)/tools/cmake/toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=$(1) \
$(if $(CONFIG_PACKAGE_$(1)_CMAKE_OPTIONS),$(CONFIG_PACKAGE_$(1)_CMAKE_OPTIONS))
define $(1)_INSTALL_TARGETS
$(1)_install: $$(STAMP_DIR)/.$(1)_installed
$$(STAMP_DIR)/.$(1)_installed: $$(STAMP_DIR)/.$(1)_configured
$$(MAKE) -C $$(PKG_BUILD_DIR) $$(PKG_JOBS) install
$$(call MESSAGE,"Installing $(1)")
$$(call touch_stamp,$$@)
$$(eval $$(call INSTALL_TARGETS))
endef
define $(1)_CONFIGURE_CMDS
cd $$(PKG_BUILD_DIR) && \
$$(TARGET_CONFIGURE_OPTS) \
$$(TARGET_CONFIGURE_ARGS) \
$$(STAGING_DIR_HOST)/bin/cmake \
$$(PKG_SOURCE_DIR) \
$$(1)_CMAKE_OPTIONS
$$(call MESSAGE,"Configuring $(1)")
$$(call touch_stamp,$$@)
endef
define $(1)_BUILD_CMDS
$$(MAKE) -C $$(PKG_BUILD_DIR) $$(PKG_JOBS)
$$(call MESSAGE,"Building $(1)")
$$(call touch_stamp,$$@)
endef
define $(1)_INSTALL_STAGING_CMDS
$$(MAKE) -C $$(PKG_BUILD_DIR) $$(PKG_JOBS) DESTDIR=$$(STAGING_DIR) install
$$(call MESSAGE,"Installing $(1) to staging directory")
$$(call touch_stamp,$$@)
endef
define $(1)_UNINSTALL_TARGETS
$(1)_uninstall:
$$(MAKE) -C $$(PKG_BUILD_DIR) $$(PKG_JOBS) uninstall
$$(call MESSAGE,"Uninstalling $(1)")
$$(eval $$(call UNINSTALL_TARGETS))
endef
define $(1)_CLEAN_CMDS
$$(MAKE) -C $$(PKG_BUILD_DIR) $$(PKG_JOBS) clean
$$(call MESSAGE,"Cleaning $(1)")
endef
define $(1)_DISTCLEAN_CMDS
rm -rf $$(PKG_BUILD_DIR)
$$(call MESSAGE,"Distcleaning $(1)")
endef
endef
```
这个宏定义了一些函数,用于生成 CMake 构建系统的 Makefile 规则,例如:`$(1)_CONFIGURE_CMDS` 定义了用于配置 CMake 的命令,`$(1)_BUILD_CMDS` 定义了用于编译 CMake 生成的 Makefile 的命令,`$(1)_INSTALL_TARGETS` 定义了用于将 CMake 生成的 Makefile 安装到目标系统的命令等等。
而 `$(eval)` 函数可以使定义在其参数中的内容被解析并执行,所以 `$(eval $(cmake-package))` 会将 `cmake-package` 宏定义的规则转换为 Makefile 规则,从而生成构建系统的 Makefile。
.mk文件中$(eval $(cmake-package))
这是一个Makefile的语句,用于调用CMake构建工具生成Makefile。其中$(eval)是一个make函数,用于将一个字符串作为Makefile语句执行。$(cmake-package)是一个Makefile变量,它存储了CMake生成Makefile所需的一些参数和选项。整个语句的作用是将$(cmake-package)作为参数传递给CMake,并将生成的Makefile包含到当前Makefile中。这样就可以使用Makefile来编译和构建项目了。
阅读全文