我有以下问题。我尝试使用 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
变量到正确的路径HOST
rootfs 代替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.