交叉编译中的CMake CMAKE_AUTOMOC

2024-01-18

我有以下问题。我尝试使用 CMake 中构建的本机机制进行交叉编译。我准备了以下 toolchain.cmake 文件:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(CMAKE_SYSROOT /tmp/filesystem)

set(tools /opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabihf)
set(CMAKE_C_COMPILER ${tools}-gcc)
set(CMAKE_CXX_COMPILER ${tools}-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

并在目标中CMakeList.txt is use:

set(CMAKE_AUTOMOC ON)

我希望当我使用时CMAKE_FIND_ROOT_PATH_MODE_PROGRAM set to NEVER根据文档,CMake 将使用 mocHOST:

如果设置为 NEVER,则 CMAKE_FIND_ROOT_PATH 中的根将是 忽略,仅使用主机系统根目录。

然而它仍然尝试使用 mocTARGET手臂图像根文件系统。

我尝试找到 moc 可执行文件,就像这篇文章的第一个答案中一样:如何使用 CMake 包含某个 Qt 安装? https://stackoverflow.com/questions/12511370/how-to-include-a-certain-qt-installation-using-cmake但没有运气。

我也尝试设置QT_MOC_EXECUTABLE变量到正确的路径HOSTrootfs 代替TARGET但也没有运气。我认为 CMake 不使用此变量CMAKE_AUTOMOC被设定为ON因为在强制更改此缓存变量后,cmake 仍然使用 mocTARGET rootfs.

有什么想法如何解决这个问题吗?

# EDIT 1

我发现 automoc 在 build 文件夹中生成这样的文件:

CMakeFiles/*target_name*_automoc.dir/AutogenInfo.cmake

在我的例子中,此类变量设置为错误的路径:

set(AM_QT_MOC_EXECUTABLE "/tmp/filesystem/usr/lib/arm-linux-gnueabihf/qt5/bin/moc")

应该:

set(AM_QT_MOC_EXECUTABLE "/usr/bin/moc")

I set AM_QT_MOC_EXECUTABLE更正 main 中的值CMakeList.txt但仍然在使用错误的路径生成提到的文件之后TARGET rootfs.


感谢这篇文章,我终于找到了解决方案:如何将 CMake 的 AUTOMOC 功能与自定义 Qt 包结合使用? https://stackoverflow.com/questions/36570791/how-can-i-use-cmakes-automoc-feature-with-a-custom-qt-package。正如我假设的QT_MOC_EXECUTABLE不直接使用AUTOMOC.

第一个 qt 之前find_package必须添加以下行:

set(QT_MOC_EXECUTABLE /usr/bin/moc)
add_executable(Qt5::moc IMPORTED)
set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_MOC_EXECUTABLE})

这里的问题是不仅变量QT_MOC_EXECUTABLE必须设置为正确的值,但最终 automoc 仅使用Qt5:moc在任何 qt 包被包含之前必须声明的目标CMakeList.txt file.

其他 qt 工具也存在同样的问题,因此更通用的选项是:

file(GLOB Qt_bin /usr/bin)
find_program(QT_MOC_EXECUTABLE qt_moc moc PATHS ${Qt_bin})
add_executable(Qt5::moc IMPORTED)
set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_MOC_EXECUTABLE})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译中的CMake CMAKE_AUTOMOC 的相关文章

随机推荐

  • Objective-c 函数指针

    我需要做这样的事情 id myFunction aMethodDeclaredInMyClass self myFunction 任何帮助表示赞赏 如果您提前知道方法 self performSelector selector myMeth
  • 使用 C++ dll 的 C# 应用程序中的堆栈溢出

    我有一个使用 c cli 托管 dll 的 C 程序 该dll包含大量遗留代码 由相当多的win32窗口组成 问题是 dll 中的窗口需要比平均水平多一点的堆栈空间cough 由于这些不是后台进程 而是 win32 api 我需要扩大 GU
  • 在我的 Xampp 本地主机中哪里可以找到 .htaccess 文件

    我这里有一个简单的问题 我是使用 php 和 apache 的初学者 实际上我想修改 htaccess 中的一些配置 但我找不到 任何人都可以告诉我它位于哪里 TIA htaccess设置目录特定设置 它可以进入每个网络目录根据需要更改设置
  • 我真的应该删除 ValueEventListener 吗?

    DatabaseReference Ref FirebaseDatabase getInstance getReference Constants Client path Ref keepSynced true Ref addValueEv
  • 在 asp.net 中使用 SAML2.0 进行 SSO

    我的要求是在asp net中使用SAML2 0实现SSO 我这边确实有 2 个供应商 想要将用户从一个站点传递到另一站点而不登录第二个站点 我以前从未使用过SAML2 0 谁能帮我看看我该如何完成它 首先让我们区分协议和令牌格式 我假设您正
  • 在模态框中打开网页?

    这可能吗 不仅是 html 还有不同的样式表等 同时遮蔽屏幕的其余部分 谢谢你的帮助 Ann 查看Colorbox http colorpowered com colorbox Demo http colorpowered com colo
  • 从 Dart 中的 JavaScript 对象获取任意属性

    Edit 这是一个说明我的问题的最小项目 https github com ahirschberg dart js interop toy您可以通过将其提供给浏览器来查看所描述的错误 pub get然后要么pub serve 飞镖 或pub
  • mysql 按字母顺序排列

    我正在尝试按字母顺序对 mysql 数据进行排序 一个 乙 C D 当我点击 B 时 此查询运行 按 b 从用户顺序中选择名称 但结果显示以 a 或 c 或 d 开头的所有记录 我想显示仅以 b 开头的记录 感谢帮助 我想显示仅以 b 开头
  • “git revert”中的“他们”和“我们”是谁?

    我无法理解谁us and them在这些冲突中git revert 所以我真的不知道这里发生了什么 git revert some commit hash Then git status显示以下冲突 deleted by them path
  • 编写编译器……什么是对的,什么是错的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用干净或自定义配置文件启动 VSC

    通常 VSC 将设置和用户数据存储在 appdata Code 以及扩展名 userprofile vscode 有没有办法告诉新实例加载其他一些配置文件或从 空白画布 开始 就像您可以使用 Firefox 一样 no remote pro
  • 使用 SFML 使自定义类型可绘制

    我最近开始使用 SFML 我决定作为一种学习经验 我将使用它制作一个 pong 克隆 我定义了一个名为Ball绘制使用 SFML 绘制RectangleShape 当我尝试使用以下命令将这个自定义类型绘制到屏幕上时window draw 但
  • Rust 基准测试已优化

    我正在尝试对从 Rust 哈希映射中获取密钥进行基准测试 我有以下基准 bench fn rust get b mut Bencher let hash keys get random hash
  • Qt 去除边距

    我目前正在使用 QMainWindow 小部件 我想删除内部小部件周围的边距 我成功删除了窗口边框的边距 但没有删除窗口内小部件的边距 这是我的代码 例如 this gt mainWidget new QWidget this this g
  • 如何使用Javascript切片提取字符串的第一个和最后一个字母?

    如何使用 JavaScriptslice提取字符串的第一个和最后一个字母 Eg Hello World 我需要的结果是 dH 以下是我的 jsfiddle http jsfiddle net vSAs8 http jsfiddle net
  • log4net AdoNetAppender 截断消息文本

    我遇到一个问题 无论我做什么 我的消息字段都会被截断为大约 42k 这是一个简短的片段来说明我的配置
  • R - 匹配不同长度矩阵的行和列

    我现在的问题如下 我有一个有向 1 模式边缘列表 代表在某一年参与联合项目的演员对 可能如下所示 projektleader projectpartner year A B 2005 A C 2000 B A 2002 现在我只需要某一特定
  • 如何将 UITextField 中用作 leftView 的 UILabel 与 textField 的文本垂直对齐?

    我正在使用一个UILabel as the leftView of a UITextField 问题是文本字段的文本高于标签的文本 这是我到目前为止使用过的代码 UILabel startsWith UILabel alloc init s
  • React-Navigation:使用/更改带有 Redux 状态的标题标题

    是否可以访问 React Navigation 的标题标题中的整个 Redux 状态 The 官方文档 https reactnavigation org docs intro headers表示导航对应的状态是可访问的 static na
  • 交叉编译中的CMake CMAKE_AUTOMOC

    我有以下问题 我尝试使用 CMake 中构建的本机机制进行交叉编译 我准备了以下 toolchain cmake 文件 set CMAKE SYSTEM NAME Linux set CMAKE SYSTEM PROCESSOR arm s