【问题标题】:Cannot install regular files for Yocto using CMake无法使用 CMake 为 Yocto 安装常规文件
【发布时间】:2018-11-05 00:08:55
【问题描述】:

我已经使用 autotools 几年了,现在我正在为新项目学习 CMake。

这是我所拥有的:

我的第一个食谱.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"
...

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

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

但是我希望 CMake 安装该文件。所以当我尝试这个时:

我的第一个食谱.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

【问题讨论】:

    标签: cmake yocto


    【解决方案1】:

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

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

    您可以查看 cmake.bbclass 以了解它是如何实现的。它位于 poky/meta/classes/cmake.bbclass

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

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多