无法使用CMake为Yocto安装常规文件

时间:2018-10-24 21:51:16

标签: cmake yocto

几年来我一直在使用自动工具,现在我正在为新项目学习CMake。

这是我所拥有的:

myfirstrecipe.bb:

inherit pkgconfig cmake
...
do_install() {
    install -d ${D}${datadir}/folder1/folder2
    install -m 0755 ${S}/files/file.txt ${D}${datadir}/folder1/folder2
}

mysecondrecipe.bb:

...
DEPENDS = "myfirstrecipe"
...

这很好。第二个配方可以找到第一个配方安装的file.txt,我看到它安装在secondrecipe sysroot中:

build/tmp/work/armv7ahf-vfp-os-linux-musleabi/mysecondrecipe/510-r0/mysecondrecipe-sysroot/usr/share/folder1/folder2/file.txt

但是我想让CMake安装该文件。所以当我尝试这个:

myfirstrecipe.bb:

inherit pkgconfig cmake
...
OECMAKE_TARGET_INSTALL = "file-install"

CMakeLists.txt:

add_custom_target(file-install)
add_custom_command(TARGET file-install POST_BUILD 
                COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_DATADIR}/folder1/folder2
                COMMAND ${CMAKE_COMMAND} -E copy_if_different
                ${CMAKE_SOURCE_DIR}/files/file.txt
                ${CMAKE_INSTALL_DATADIR}/folder1/folder2/)

然后我从mysecondrecipe.bb收到一个构建错误,说它由于未安装而找不到文件。我看到它安装在这里:

build/tmp/work/armv7ahf-vfp-os-linux-musleabi/myfirstrecipe/1.0-r0/myfirstrecipe-1.0/share/folder1/folder2/file.txt

但不在上面的路径中。有人可以看到我所缺少的吗?如果我要使用Autotools,我可以很容易地使用它:

Automake.am:

file-install: $(shell find files/ -type f -name '*.txt')
    mkdir -p ${DESTDIR}${datadir}/folder1/folder2
    cp -u $^ -t ${DESTDIR}${datadir}/folder1/folder2

1 个答案:

答案 0 :(得分:0)

基本上,您不使用标准的文件安装方式。 CMake具有 install 指令install,该指令是常用且功能强大的。

这样做会导致出现一个很好的情况,即在 myfirstrecipe.bb 中不需要自己的 do_install 任务。您已经继承的 cmake.bbclass ,正在添加 do_install 任务,并依赖于CMakeLists.txt

中的 install 指令。

您可以看一下cmake.bbclass来了解它是如何实现的。在poky / meta / classes / cmake.bbclass

我想切换到安装会使生活更轻松