2017-11-06 22 views
0

PATHSオプションを提供するfind_pathコールがあります。 CMake 2.8.12では、提供されたパスを返しますが、CMake 3.7.2では${CMAKE_SOURCE_DIR}(または、そのディレクトリにあるその他のCMakeコンテンツ)を返します。CMakeのfind_path動作の変更CMake 2.8.12と3.7.2の間の変更

find_path(サードパーティ)スニペットは、次のようになります。

set(ZLIB_SEARCH_PATH "${PATH_ETC}/src") 
set(ZLIB_SRC_DIR_NAME "zlib") 
set(ZLIB_PATH_INIT "${ZLIB_SEARCH_PATH}/${ZLIB_SRC_DIR_NAME}") 

find_path(ZLIB_PATH 
    NAMES CMakeLists.txt 
    PATHS "${ZLIB_PATH_INIT}" 
    DOC "Location of zLib source") 

Changed find_library behavior from CMake 2.8 to CMake 3.2は、私は、サードパーティ製を含むてるとして、それは私には解決策ではありませんNO_DEFAULT_PATHオプションを追加する作業のヒントを提供していますがソフトウェアと私は変更の根本的な原因を理解したいと思います。未設定の以下の変数のすべてが空である

注/:

  • CMAKE_LIBRARY_ARCHITECTURE
  • CMAKE_PREFIX_PATH
  • CMAKE_INCLUDE_PATH
  • CMAKE_FRAMEWORK_PATH
  • CMAKE_FIND_ROOT_PATH。

動作の変更は何ですか? find_pathコールを「デバッグする」方法はありますか?

+2

ショー正確 'find_path'コールを。あるいは、より良い、[mcve]ので、さまざまな変数の内容について推測する必要はありません。 – Tsyvarev

答えて

1

find_pathコール・メソッドを「デバッグ・インする」という方法は、CMake自体にデバッグする以外には残念です。

検索の順番は目的によって変更されていませんでした。私が見つけることができる唯一の関連するコミットは"find_*: Fix search order when the environment duplicates some HINTS"でした。 PATHSHINTSというキーワードに置き換えて、より良いものにするかどうかを試すことができます。

上記の呼び出しが独自のコードである場合は、既にパス(ZLIB_PATH_INIT)が分かっている場合はfind_pathを使用しないでください。コードがあなたのものでない場合

、あなたは常に検索リストからローカルファイルを削除するためにCMAKE_IGNORE_PATHを使用することができます。

list(APPEND CMAKE_IGNORE_PATH "${CMAKE_SOURCE_DIR}") 
+0

ありがとうフロリアン、すべての回答部分が適用されます:PATHSをHINTSに置き換えると、問題が解決され、CMAKE_IGNORE_PATHに$ {CMAKE_SOURCE_DIR}が追加されます。最後に、find_pathはサードパーティのCMakeシステムでデフォルトのものよりも別のzlibを使用するために使用されます。 –

+0

私は最終的にサードパーティのサプライヤを持ってきて、PATHSをHINTSに置き換えて、CMakeのfind_pathドキュメントの推奨に従ってください: "HINTSオプションで指定されたパスを検索してください。すでに見つかった別の項目の場所ハードコードされた推測はPATHSオプションで指定する必要があります "。 –

+1

@RolandSarrazinよろしくお願いします。また、サードパーティのソフトウェアでは別の問題を提起します。単に 'CMakeLists.txt'を検索するだけでは、' ZLIB'に特有のものではありません。それは何かを見つけることができた。 '$ {ZLIB_SEARCH_PATH}/$ {ZLIB_SRC_DIR_NAME}/CMakeLists.txt'が実行されない場合、CMakeの[' FindZLIB module'](https://cmake.org/cmake/help/latest/module/FindZLIB.html)存在しない。 – Florian

関連する問題