2017-06-25 19 views
1

ビルドするプラットフォームにtoolchain.cmakeが定義されています。ファイルをインストールする場所を指定しました。ただし、make installを実行すると、ファイルはデフォルトの場所/usr/....に移動します。次のように私のtoolchain.cmakeを設置している:toolchain.cmakeでCMAKE_INSTALL_PREFIXを設定します。

# this one is important 
SET(CMAKE_SYSTEM_NAME Linux) 
#this one not so much 
SET(CMAKE_SYSTEM_VERSION 1) 

# specify the cross compiler 
SET(CMAKE_C_COMPILER /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/bin/i686-aldebaran-linux-gnu-gcc) 
SET(CMAKE_CXX_COMPILER /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/bin/i686-aldebaran-linux-gnu-g++) 

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot) 
SET(CMAKE_SYSROOT /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot) 

# search for programs in the build host directories 
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) 
# for libraries and headers in the target directories 
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 
SET(THREADS_PTHREAD_ARG 1) 
SET(CMAKE_INSTALL_FULL_INCLUDEDIR /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot/usr/local/include) 
SET(CMAKE_INSTALL_FULL_LIBDIR /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot/usr/local/lib) 
SET(CMAKE_INSTALL_FULL_MANDIR /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot/share/man) 
SET(CMAKE_INSTALL_PREFIX /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot) 
SET(CMAKE_STAGING_PREFIX /usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot) 

見ることができるように、私はパスの設定のやり過ぎ行ってきたが、それらのどれも動作しません。

cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=~/myScripts/Toolchain-Naoqi.2.1.4.13.cmake -DCMAKE_INSTALL_PREFIX=/usr/local/naoqi-sdk-2.1.4.13-mac64/ctc-mac64-atom-2.1.4.13/cross/i686-aldebaran-linux-gnu/sysroot .. 

それはいいだろう、それが適用されるように、パスは私のtoolchain.cmakeに設定されていないこと:以下に示すようにmake install場所正しい場所にファイルを持っているために、私はcmakeのコマンドで-DCMAKE_INSTALL_PREFIX=<path>を渡す必要が私が建設しているすべてのプロジェクト

答えて

0

パスが上書きされるのは、このToolchainファイルの実行後にproject()が呼び出されるためです。 project()の機能は、とりわけ、CMAKE_INSTALL_PREFIXをデフォルト値に設定します。

プラットフォーム間の互換性を確保するため、CMakeLists.txtCMAKE_INSTALL_PREFIXを指定することをお勧めします。たとえば、あなたのアプローチは、ファイルを使用するUNIX以外のシステムを持つ人を防ぎます。

あなたが本当に上に行くと、コード内でそれを指定したい場合は、私は2つのオプションを参照してください。project()を呼び出した後、すなわち、プロジェクトのCMakeLists.txtの一つで打ちCMAKE_INSTALL_PREFIX

  • を。
  • some_folder/Platform/<My_Platform>.cmakeにあるカスタム 'プラットフォーム'ファイルを入力し、CMAKE_MODULE_PATHsome_folderを追加します。このプラットフォームファイルでは、CMAKE_INSTALL_PREFIXを指定して、別のCMakeLists.txtを壊さないようにします(この特定のプラットフォームにこのインストールフォルダが必要なのは私の前提です)。
+1

Nibor、情報ありがとう、しかしあなたは私がやっていることのいくつかを誤解してしまった。 CMakelist.txtファイルに 'CMAKE_INSTALL_PREFIX'を指定していません。ステージング領域がすべて同じであるため、特定のプラットフォーム用に構築しているすべてのケースに適用されるツールチェーンに設定します。非UNIX系のシステムを持つ人は、別のtoolchain.cmake定義を使用します。 私はあなたの2番目のポイントでアドバイスを適用しようとします。 – gone

0

この問題は、問題を解決せずに閉じた旧バグトラッカーのbug reportに基づいて、CMake自体のバグが原因であるようです。

問題がCMAKE_TOOLCHAIN_FILEファイルに

指定CMAKE_INSTALL_PREFIXのようにまとめているが、正確にあなたが発生している問題について説明し何 効果

を持っていません。

CMake v3.5.1でツールチェーンファイルを使用してクロスコンパイルしようとすると、同じ問題が発生するため、この問題は修正されていないと思います。

CMakeの現在のバグトラッカーの移行バグレポートはhereです。

installコマンドでをインラインに設定することを含む回避策に加えて、マイグレーションされたバグレポートの会話にコメントを追加することにより、CMakeチームにこのバグを修正するよう請願することにより、

関連する問題