我遇到以下問題。我正在使用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
根文件生成後述文件。