cmake - 无法使用 CMake 为 Yocto 安装常规文件
问题描述
我已经使用 autotools 几年了,现在我正在为新项目学习 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"
...
这工作正常。第二个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 安装文件。所以当我尝试这个时:
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
解决方案
基本上你不使用安装文件的标准方式。CMake 有一个install指令install,这是常用且功能强大的。
这样做会带来很好的情况,即在myfirstrecipe.bb中不需要自己的do_install任务。您已经继承的cmake.bbclass正在添加一个do_install任务并依赖于CMakeLists.txt中的install指令
您可以查看 cmake.bbclass 以了解它是如何实现的。它位于 poky/meta/classes/cmake.bbclass
我想切换到安装会让生活更轻松
推荐阅读
- typescript - 如何从打字稿中的现有类中提取接口
- java - DefaultComboBoxModel addElement vs addAll
- c++ - 来自控制台的 c++ Linux 输入(在 docker 容器内)
- android - 如何在 bindCursor 内的 ViewHolder 上的 RecyclerViewCursorAdapter 中运行 CoroutineScope{}
- ios - 为什么这个动画没有按预期工作?
- java - Spring Boot Webflux - flatMap 是链接 http 调用的正确方法吗?
- google-apps-script - 脚本执行后锁定工作表中的行并且最后一列有文本 SENT
- javascript - 我可以在 JavaScript 上使用 setTimeout() 作为并行处理函数吗
- linux - Makefile:没有规则可以使“/constants.py”需要目标“/constants.py.in”。停止
- java - 404 未找到,即使我的映射是正确的,也有错误的 url