追加CMake find_pathはLinuxでは動作しますが、MingWでは動作しません。これをどうやって解決するのですか?</p> <p>は、次のコマンドを実行します:Linuxシステム上で
mkdir test
cd test
mkdir mingw linux files
touch files/blah
を以下のCMakeLists.txt:mingwのツールチェーンファイルと "mingwの" フォルダの実行cmakeので
cmake_minimum_required(VERSION 3.5)
PROJECT(TEST LANGUAGES CXX)
find_path(BLAH_DIR
blah
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/files
)
message(STATUS "BLAH_DIR=${BLAH_DIR}")
以下のようになります。
# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
"linux" f古い、単にcmakeを実行します。我々が得るMinGWのために
:Linuxの場合
BLAH_DIR=BLAH_DIR-NOTFOUND
を我々が得る:
BLAH_DIR=/Development/test/files
予想通り。
なぜfind_pathがMingWで動作しないのですか? CMakeでバグレポートを提出する必要がありますか?
私はドキュメントを見て、テキストの壁に、ルートパスがすべてに付加されているというビットを見逃しました。 (私は尋ねることを忘れました)どうすればこの問題を解決できますか? – AlastairG
'どうすれば解決できますか? - たとえば、ツールチェーンから' set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) '行を削除すると、ホスト環境も検索されます。 – Tsyvarev
これは、find_pathを使用しているので動作しません。これは、インクルードファイルでなくても、どんなファイルでもかまいません。また、ターゲットシステムからのみインクルードする必要があるファイルをホストシステムからインクルードしてクロスコンパイルすることもできます。 – AlastairG