私は以下の問題を抱えています。クロスコンパイルのためにCMakeでネイティブなメカニズムビルドを使用するようにしています。からMOCを使用しますが、ドキュメントによると、私はNEVER
CMakeのにCMAKE_FIND_ROOT_PATH_MODE_PROGRAM
セットを使用する場合と期待CMake CMAKE_AUTOMOCクロスコンパイル
set(CMAKE_AUTOMOC ON)
:使用である
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
中:私は、次のtoolchain.cmakeファイルを準備しましたHOST
:
設定し、その後、CMAKE_FIND_ROOT_PATHにルーツが は無視されていないだけされますNEVERする場合ホストシステムのルートが使用されます。
しかし、まだTARGET
アームイメージrootfsからmocを使用しようとしています。
私はこの記事からの最初の答えのようにmoc実行可能ファイルを再構築しようとします:How to include a certain Qt installation using CMake?しかし運はありません。
また、変数の代わりにTARGET
のHOST
rootfsから適切なパスに変数を設定しようとしましたが、そこには運がありません。私はこの変数がCMAKE_AUTOMOC
がON
に設定されているときにこの変数がCMakeによって使用されていないと考えます。このキャッシュされた変数cmakeはまだTARGET
rootfsからmocを使用します。
この問題を解決する方法はありますか?
#の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")
私はメインCMakeList.txt
に値を修正するためにAM_QT_MOC_EXECUTABLE
を設定するが、それでも後に言及したファイルはTARGET
にrootfsから間違ったパスで生成されます。