#python #cmake
Вопрос:
Я создал несколько более ранних версий Python (например, 3.6) в соответствии со стандартными предписаниями и установил их, скажем, в пользовательском каталоге /path/to/py3.6.15
.
Я пытаюсь найти компоненты Interpreter
и Development
компоненты через CMake find_package
(см. Документы) под Linux.
В качестве примера предположим следующую структуру каталогов специально созданного Python
py3.6.15
├─ bin
├─ include
│ └─ python3.6m
├─ lib
│ └─ python3.6
└─ share
где bin
папка содержит исполняемые файлы Python, include/python3.6m
файлы заголовков, lib
общие библиотеки, lib/python3.6
стандартную библиотеку Python и share
документацию.
Команда CMake является
find_package(Python3 3.6 EXACT COMPONENTS Interpreter Development PATHS "/path/to/py3.6.15" NO_DEFAULT_PATH)
Однако CMake не удается найти платформу Python; подробное сообщение об ошибке (с --debug-find
переключателем)
Paths specified by the find_package HINTS option.
none
Paths specified by the find_package PATHS option.
/path/to/py3.6.15
find_package considered the following locations for the Config module:
/path/to/py3.6.15/Python3Config.cmake
/path/to/py3.6.15/python3-config.cmake
/path/to/py3.6.15/lib/python3.6/Python3Config.cmake
/path/to/py3.6.15/lib/python3.6/python3-config.cmake
The file was not found.
Установка подсказки Python3_ROOT_DIR
(как указано в документации) не помогает. Добавление Python3Config.cmake
модуля в py3.6.15
папку, в которой указаны артефакты, также не помогает (см. Соответствующие документы); т. Е. Отображается то же сообщение об ошибке. Пример моего Python3Config.cmake
:
set(Python3_EXECUTABLE ${CMAKE_CURRENT_LIST_DIR}/bin/python3)
set(Python3_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/include/python3.6m)
set(Python3_LIBRARY_DIRS ${CMAKE_CURRENT_LIST_DIR}/lib)
set(Python3_LIBRARIES ${CMAKE_CURRENT_LIST_DIR}/lib/libpython3.6m.so)
ПРИМЕЧАНИЕ: Я использую CMake v3.20.2 в Debian 11. Пользовательская папка Python ( /path/to/py3.6.15
) не добавляется в путь по очевидным причинам.
Я хотел бы знать, есть ли какое-то правильное решение этой проблемы без жесткого кодирования путей пользовательских двоичных файлов/библиотек Python в сценариях CMake.
Комментарии:
1. В
PATH
опции укажите абсолютный путь к каталогу, содержащемуPython3Config.cmake
файл. Вы можете использовать выражение${CMAKE_CURRENT_SOURCE_DIR}
для ссылки на текущий исходный каталог (гдеCMakeLists.txt
находится).2. @Tsyvarev : Я исправил свой вопрос, чтобы избежать недопонимания. Я всегда указываю абсолютный путь к платформе Python.
3. Итак, соответствует ли фактический путь к вам
Python3Config.cmake
одному из путей, перечисленных в--debug-find
выходных данных? Обратите внимание, что для удовлетворения запроса на версию (3.6
в вашем случае) вам также необходимо предоставить скриптPython3ConfigVersion.cmake
рядом сPython3Config.cmake
ним. Об ожидаемом поведении этого сценария см. Документацию .4. Фактический путь к
Python3Config.cmake
нему совпадает с одним из путей, перечисленных в--debug-find
выводе. Второй момент важен; я тоже должен это проверить.