CMake find_package () поиск путей при кросс-компиляции в Windows - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь выполнить кросс-компиляцию с помощью arm-none-eabi-gcc в Windows, используя cmake, и по какой-то причине find_package () ищет версии всех каталогов в моем $ PATH, а не в CMAKE_FIND_ROOT_PATH Я предоставил в файле toolchain. в частности, в файле toolchain у меня есть следующие строки:

SET(CMAKE_INSTALL_PREFIX "C:/toolchains/cm0p_root" CACHE PATH "Cmake install prefix")
set(CMAKE_FIND_ROOT_PATH ${CMAKE_INSTALL_PREFIX})
...
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

Я скомпилировал и установил мою библиотеку с тем же набором инструментов, и все было установлено правильно в каталог cmp0_root.

Файл моих проектов CMakeLists.txt содержит:

find_package(myLIB REQUIRED)
target_link_libraries(testProject PUBLIC myLIB::myLIB)

и find_package () не может найти библиотеку. Это удастся, если я поставлю любую из двух версий с HINTS или PATHS

find_package(myLIB REQUIRED HINTS /)
find_package(myLIB REQUIRED PATHS "C:/toolchains/cm0p_root")

и используя параметр командной строки -D CMAKE_FIND_DEBUG_MODE=ON Я вижу, что он ищет следующие пути:

Checking prefix [C:/toolchains/cm0p_root/git-sdk-64/mingw64/]
Checking prefix [C:/toolchains/cm0p_root/Users/myname/]
Checking prefix [C:/toolchains/cm0p_root/Program Files/ConEmu/]
Checking prefix [C:/toolchains/cm0p_root/Python/Python36-32/]
Checking prefix [C:/toolchains/cm0p_root/Python/Python36-32/Scripts/]
Checking prefix [C:/toolchains/cm0p_root/Windows/]
Checking prefix [C:/toolchains/cm0p_root/LLVM/]
Checking prefix [C:/toolchains/cm0p_root/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/common/]
Checking prefix [C:/toolchains/cm0p_root/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/avr/]
Checking prefix [C:/toolchains/cm0p_root/Program Files (x86)/IAR Systems/Embedded Workbench 8.2/arm/]
Checking prefix [C:/toolchains/cm0p_root/Program Files (x86)/MSBuild/12.0/Bin/]

и многое другое, но очевидно, что CMake добавляет префикс FIND_ROOT_PATH к началу всех моих переменных Windows $ PATH! список намного длиннее, но он никогда не ищет C:/toolchains/cm0p_root/, что мне и нужно (наверное, подсказка работает).

Как заставить CMake не искать во всех этих каталогах? Я кросс-компиляция, и, насколько я знаю, он должен искать только в моем "поддельном" корневом каталоге, так как CMAKE_FIND_ROOT_PATH_MODE_PACKAGE имеет значение ONLY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...