2016-08-22 9 views
3

私は以下の問題を抱えています。クロスコンパイルのために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?しかし運はありません。

また、変数の代わりにTARGETHOST rootfsから適切なパスに変数を設定しようとしましたが、そこには運がありません。私はこの変数がCMAKE_AUTOMOCONに設定されているときにこの変数が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から間違ったパスで生成されます。

答えて

1

私はこの記事のおかげで解決策を最後に見つけました: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}) 
関連する問題