Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Yocto的正确位置部署Autotools库的Find*.cmake文件?_Cmake_Yocto_Autotools_Bitbake_Cmake Modules - Fatal编程技术网

如何在Yocto的正确位置部署Autotools库的Find*.cmake文件?

如何在Yocto的正确位置部署Autotools库的Find*.cmake文件?,cmake,yocto,autotools,bitbake,cmake-modules,Cmake,Yocto,Autotools,Bitbake,Cmake Modules,我为我的公司项目在现有的YoctoGit上创建了一个新层 在这一层中,我添加了一些基于外部自动工具的库。 一些应用程序需要链接到此库,并且应用程序项目都基于cmake 拿着其中一个库(例如),我可以很容易地找到一些添加到我的库配方中 现在,如果我在PC上运行,只需将这个FindCoAP.cmake文件放在cmake的${cmake\u ROOT}/Modules目录中,但是我应该如何从bitbake配方(安装hook)中继续使我的Find*.cmake模块可用于任何依赖的项目 我应该尝试从系统信

我为我的公司项目在现有的YoctoGit上创建了一个新层

在这一层中,我添加了一些基于外部
自动工具的库。
一些应用程序需要链接到此库,并且应用程序项目都基于
cmake

拿着其中一个库(例如),我可以很容易地找到一些添加到我的库配方中

现在,如果我在PC上运行,只需将这个
FindCoAP.cmake
文件放在
cmake
${cmake\u ROOT}/Modules
目录中,但是我应该如何从
bitbake
配方(安装hook)中继续使我的
Find*.cmake
模块可用于任何依赖的项目

我应该尝试从系统信息中获取
Yocto
cmake
cmake\u ROOT
变量,还是更安全、更可靠的方法

do_install_append() {
    cmake --system-information | grep CMAKE_ROOT | cut -d \" -f2
    install -d ${D}/$CMAKE_ROOT}/Modules
    install ${S}/FindCoAP.cmake ${D}/$CMAKE_ROOT}/Modules
}

提前感谢。

将FindFoo.cmake与尚未发布的cmake项目一起发布

理想的方法是更新上游项目本身。因此,您将适当地更新配方和包
FindFoo.cmake

如果要立即执行此操作,请执行以下操作:

  • FindFoo.cmake
    添加到您的图层(添加到配方旁边的
    文件
    目录)
  • 将该cmake文件添加到
    SRC_URI
    (即
    SRC_URI+=)file://FindFoo.cmake“
  • 例如,将其安装在
    do_Install
    目录
    ${D}${datadir}/cmake/Modules/
  • 通过
    FILES_${PN}-dev
    变量将其打包到dev包中(参见下面的示例配方)
  • 通过其他配方使用该配方

    通常的方法是将
    .cmake
    文件打包到
    ${PN}-dev
    包中。在您的情况下,您的应用程序(取决于libcoap)只需设置
    depends=“libcoap”
    ,所有需要的文件(如标题、库和cmake文件)都将被复制(当然是硬链接)到应用程序的sysroot

    CMake模块以各种配方包装,例如:

    您的应用程序基于cmake,因此您将在配方中使用
    继承cmake
    。在中设置了本机模块搜索路径


    (顺便说一句,我做了一个构建测试,它成功了,但显然没有提供cmake。)

    那么您想在bitbake运行期间将
    foo.cmake
    安装到主机目录(在OpenEmbeed目录结构之外)?否,我想将其安装到Yocto sysroot,以便在编译cmake应用程序时可以找到库。谢谢你问@TomasNovotny。虽然我开始认为拥有一个
    FindFoo.cmake
    对我没有任何帮助。非常感谢你的回答。这里的信息是黄金,所以我会接受你的答案,尽管它并没有真正回答我假装学到的东西(为一个非cmake项目制作一个FindFoo.cmake以使其工作良好)。我肯定这是我的错。我试图把事情弄错。再次感谢@j4x哦,对不起,我想我更明白。。。我添加了整个“使用尚未发布的cmake项目发布FindFoo.cmake”部分。这正确地回答了你的问题?否则我会再试一次;-)如果你的第一个答案是黄金,那么第二部分就是钻石。我一直试图在没有这个“FindFoo.cmake”的情况下继续前进,但没有幸运()。我想这不是CMake的错,但我还是不能确定。非常感谢@TomasNovotny。