mk文件是怎么配置cmake-package编译时自动下载这些包的
时间: 2024-03-20 20:42:25 浏览: 14
在Makefile中,可以使用cmake命令的-D选项来指定CMake变量。例如,可以在Makefile中定义一个变量来存储要使用的CMake包的名称,然后在调用cmake命令时使用-D选项将包的名称传递给CMake,让CMake自动下载和安装这些包。
具体来说,可以在Makefile中定义一个变量,例如PACKAGES,用于存储要使用的CMake包的名称。然后,在调用cmake命令时,使用-D选项将PACKAGES变量传递给CMake:
```
PACKAGES = package1 package2 package3
cmake . -DCMAKE_PREFIX_PATH=$(PREFIX) -DPACKAGES="$(PACKAGES)"
```
在上面的例子中,假设PACKAGES变量包含要使用的三个CMake包的名称,即package1,package2和package3。然后,使用-D选项将PACKAGES变量传递给CMake,并使用双引号将包的名称括起来,以便CMake可以正确地解析这些名称。CMake会自动下载和安装这些包,然后在构建项目时使用它们。
相关问题
.mk文件中$(eval $(cmake-package))
这是一个Makefile的语句,用于调用CMake构建工具生成Makefile。其中$(eval)是一个make函数,用于将一个字符串作为Makefile语句执行。$(cmake-package)是一个Makefile变量,它存储了CMake生成Makefile所需的一些参数和选项。整个语句的作用是将$(cmake-package)作为参数传递给CMake,并将生成的Makefile包含到当前Makefile中。这样就可以使用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。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)