CMake查找路径行为在CMake 2.8.12和3.7.2之间发生变化

时间:2017-11-06 17:22:12

标签: cmake version

我有find_path来电,提供PATHS选项。在CMake 2.8.12中,它返回提供的路径,而在CMake 3.7.2中,它返回${CMAKE_SOURCE_DIR}(或恰好是该目录的其他一些CMake内容)。

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来电?

1 个答案:

答案 0 :(得分:1)

遗憾的是没有"调试到" find_path调用方法除了调试CMake本身外。

搜索顺序绝对不会因目的而改变。我能找到的唯一相关提交是"find_*: Fix search order when the environment duplicates some HINTS"。您可以尝试使用PATHS关键字替换HINTS,看看它是否能让事情变得更好。

如果上述调用是您自己的代码,请在知道路径find_path)时不要使用ZLIB_PATH_INIT

如果代码不是您的,您可以随时使用CMAKE_IGNORE_PATH从搜索列表中删除本地文件:

list(APPEND CMAKE_IGNORE_PATH "${CMAKE_SOURCE_DIR}")