我遇到以下问题。我正在使用CMake中的本地机制构建交叉编译。我准备以下toolchain.cmake文件:CMake CMAKE_AUTOMOC交叉编译
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的,根据文件,将使用从MOC HOST
:
如果设置为NEVER,然后在CMAKE_FIND_ROOT_PATH根将被 忽略,只有主机系统根将被使用。
但是它仍然尝试使用TARGET
arm镜像rootfs中的moc。
我尝试像这篇文章的第一个答案中那样重新引用moc可执行文件:How to include a certain Qt installation using CMake?但没有运气。
我也尝试将QT_MOC_EXECUTABLE
变量设置为从HOST
rootfs而不是TARGET
之一的正确路径,但也没有那里的运气。我事件认为当CMAKE_AUTOMOC
设置为ON
时,此变量不被CMake使用,因为在强制更改后,此缓存变量cmake仍然使用来自TARGET
rootfs的moc。
任何想法如何解决这个问题?
#EDIT 1
我发现automoc生成生成文件夹这样的文件:
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
根文件生成后述文件。