在mk文件中$(eval $(cmake-package))是做什么用的
时间: 2024-03-20 11:42:49 浏览: 196
在 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。
阅读全文