В системе Linux:CMake find_path работает на Linux, но не на MingW. Как это исправить?
Выполните следующие команды:
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" Папка выполнения CMake с файлом ToolChain MinGW например:
# 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 мы получаем:
BLAH_DIR=BLAH_DIR-NOTFOUND
Для Linux мы получаем:
BLAH_DIR=/Development/test/files
, как и ожидалось.
Почему не работает find_path для MingW? Должен ли я отправлять отчет об ошибке на CMake?
Я посмотрел документацию и пропустил в стене текста бит, в котором говорилось, что корневой путь добавлен ко всему. (Я забыл спросить), как я могу это решить? – AlastairG
'как это решить?' - например, удалите строку 'set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ТОЛЬКО)' из инструментальной цепочки, поэтому будет также искать среду хоста. – Tsyvarev
Это не сработает, поскольку я использую find_path, который может быть любым файлом, не обязательно включаемым файлом, а во-вторых, он может перехватить мой кросс-компилятор, включив файлы из хост-системы, которые должны быть включены только из целевой системы. – AlastairG