- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下问题。我正在尝试使用 CMake 中构建的 native 机制进行交叉编译。我准备了以下 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
是使用:
set(CMAKE_AUTOMOC ON)
我希望当我使用 CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
时设置为 NEVER
根据文档,CMake 将使用 HOST
中的 moc :
If set to NEVER, then the roots in CMAKE_FIND_ROOT_PATH will be ignored and only the host system root will be used.
但是它仍然尝试使用来自 TARGET
的 moc ARM 图像 rootfs。
我尝试重新找到 moc 可执行文件,就像这篇文章的第一个答案一样:How to include a certain Qt installation using CMake?但没有运气。
我也尝试设置 QT_MOC_EXECUTABLE
从 HOST
到正确路径的变量rootfs 而不是 TARGET
一个但也没有运气。我认为这个变量在 CMAKE_AUTOMOC
时没有被 CMake 使用。设置为 ON
因为在强制更改此缓存变量后 cmake 仍然使用来自 TARGET
的 moc根文件系统。
关于如何解决这个问题有什么想法吗?
# 编辑 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")
我设置了AM_QT_MOC_EXECUTABLE
更正主值 CMakeList.txt
但仍然在使用错误路径从 TARGET
生成提到的文件之后根文件系统。
最佳答案
感谢这篇文章,我终于找到了解决方案:How can I use CMake's 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
文件中。
其他 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})
关于c++ - 交叉编译中的 CMake CMAKE_AUTOMOC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075040/
我有一个关于 automoc 的问题,因为 moc 失败并出现 Parse error at "BOOST_JOIN"。我尝试了概述的“最不邪恶”黑客 here ,但无济于事(具体来说,我将 set(
我有以下问题。我正在尝试使用 CMake 中构建的 native 机制进行交叉编译。我准备了以下 toolchain.cmake 文件: set(CMAKE_SYSTEM_NAME Linux) se
我是一名优秀的程序员,十分优秀!