2017-01-18 4 views
1

追加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でバグレポートを提出する必要がありますか?

答えて

2

有用な情報のためにTsyvarevに感謝します。

タイトルの「これはどのように修正するのですか? find_pathコマンドでNO_CMAKE_FIND_ROOT_PATHとNO_DEFAULT_PATHを指定することです。

1

それはあなたのツールチェーンファイルに書き込まれます。

検索ヘッダとライブラリターゲット環境に

ヘッダを検索しfind_pathコマンド、それが唯一の/usr/x86_64-w64-mingw32の下に見えるようにします。

Even PATHオプションの前にそのルートパスが付加されます。したがって、ソースツリーにあるファイルを見つけることはできません。

find_pathコマンドの場合はdocumentation、関連する場合はmy answerを参照してください。

+0

私はドキュメントを見て、テキストの壁に、ルートパスがすべてに付加されているというビットを見逃しました。 (私は尋ねることを忘れました)どうすればこの問題を解決できますか? – AlastairG

+0

'どうすれば解決できますか? - たとえば、ツールチェーンから' set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) '行を削除すると、ホスト環境も検索されます。 – Tsyvarev

+0

これは、find_pathを使用しているので動作しません。これは、インクルードファイルでなくても、どんなファイルでもかまいません。また、ターゲットシステムからのみインクルードする必要があるファイルをホストシステムからインクルードしてクロスコンパイルすることもできます。 – AlastairG

関連する問題