CMAKE_INSTALL_PREFIX не добавлен в CMAKE_SYSTEM_PREFIX_PATH после установки CMAKE_SYSTEM_NAME в качестве универсального - PullRequest
0 голосов
/ 12 июня 2019

Я кросс-компилирую проект с CMake. find_library не удается найти библиотеку, расположенную в ${CMAKE_INSTALL_PREFIX}/lib, поскольку CMAKE_INSTALL_PREFIX не добавляется к CMAKE_SYSTEM_PREFIX_PATH, как следует в документации .

Причина этого заключается в том, что я установил CMAKE_SYSTEM_NAME в Generic в моем файле набора инструментов. Я сократил файл набора инструментов до этой единственной команды. Почему это влияет на поведение CMAKE_INSTALL_PREFIX?

Если я установлю CMAKE_SYSTEM_NAME на Linux или Windows, CMAKE_SYSTEM_PREFIX_PATH имеет некоторые предустановки, а также CMAKE_INSTALL_PREFIX добавляется, как и ожидалось.

1 Ответ

0 голосов
/ 25 июня 2019

Я думаю, что документация здесь не так. Добавление CMAKE_INSTALL_PREFIX к CMAKE_SYSTEM_PREFIX_PATH не выполняется автоматически. Это делается в модулях CMake, специфичных для платформ Windows и Linux (например, c: \ Program Files \ CMake \ share \ cmake-3.14 \ Modules \ Platform \ WindowsPaths.cmake на моем компьютере).

Чтобы имитировать одинаковое поведение для не-Windows и не-Linux-платформ, вы можете сделать следующее. В файле набора инструментов определите уникальное имя системы, а также добавьте текущий каталог в CMAKE_MODULE_PATH, чтобы Cmake искал модули здесь:

set(CMAKE_SYSTEM_NAME "MySystem")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})

Затем создайте файл платформы с именем <CMAKE_SYSTEM_NAME>.cmake в подпапке с именем Platform (например, Platform\MySystem.cmake). Внутри этого файла вы можете добавить CMAKE_INSTALL_PREFIX к CMAKE_SYSTEM_PREFIX_PATH:

# Copied from c:\Program Files\CMake\share\cmake-3.14\Modules\Platform\WindowsPaths.cmake 
if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
  list(APPEND CMAKE_SYSTEM_PREFIX_PATH
    # Project install destination.
    "${CMAKE_INSTALL_PREFIX}"
  )
  if(CMAKE_STAGING_PREFIX)
    list(APPEND CMAKE_SYSTEM_PREFIX_PATH
      # User-supplied staging prefix.
      "${CMAKE_STAGING_PREFIX}"
    )
  endif()
endif()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...