【问题标题】:CMake find_path works on Linux but not on MingW. How do I fix this?CMake find_path 适用于 Linux,但不适用于 MingW。我该如何解决?
【发布时间】:2017-01-18 12:03:23
【问题描述】:

在 Linux 系统上:

执行以下命令:

mkdir test
cd test
mkdir mingw linux files
touch files/blah

添加以下 CMakeLists.txt:

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}")

在“mingw”文件夹中,使用 mingw 工具链文件运行 cmake,如下所示:

# 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”文件夹中,只需运行 cmake。

对于 MingW,我们得到:

BLAH_DIR=BLAH_DIR-NOTFOUND

对于 Linux,我们得到:

BLAH_DIR=/Development/test/files

正如预期的那样。

为什么 find_path 不适用于 MingW? 我应该提交关于 CMake 的错误报告吗?

【问题讨论】:

    标签: linux path cmake find


    【解决方案1】:

    感谢 Tsyvarev 提供的有用信息。

    标题中“我该如何解决这个问题?”部分的答案。就是在find_path命令中指定NO_CMAKE_FIND_ROOT_PATH和NO_DEFAULT_PATH。

    【讨论】:

      【解决方案2】:

      它写在你的工具链文件中:

      目标环境

      中搜索头文件和库

      命令find_path 搜索标题,因此它只在/usr/x86_64-w64-mingw32 下查找。

      甚至 PATH 选项都带有该根路径。所以它找不到位于源树中的文件。

      请参阅documentation 了解find_path 命令,my answer 了解相关问题。

      【讨论】:

      • 我查看了文档并错过了在文本墙中说根路径已添加到所有内容的位。 (我忘了问)我该如何解决这个问题?
      • how do I solve this? - 例如,从工具链中删除行 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY),这样主机环境也会被搜索。
      • 这不起作用,因为我使用的 find_path 可以是任何文件,不一定是包含文件,其次它可能会通过包含来自主机系统的文件来干扰我的交叉编译,这应该只被包含在目标系统中。
      • 我需要在 find_path 命令中使用 NO_CMAKE_FIND_ROOT_PATH 和 NO_DEFAULT_PATH。
      猜你喜欢
      • 2016-12-08
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多