无法使用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"
...

这工作正常。第二个配方可以找到由第一个配方安装的文件.txt我看到它安装在第二个配方 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

但不是在上面的路径中。有人能看到我错过了什么吗?如果我使用自动工具,我可以很容易地使用它:

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 有一个安装指令安装,它是常用的和强大的。

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

你可以看看cmake.bbclass,看看它是如何实现的。它在poky/meta/classes/cmake.bbclass

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

最新更新