cmake CMAKE_SYSTEM_LIBRARY_PATH не правильно настроен cmake версия 3.7.2 - PullRequest
0 голосов
/ 15 апреля 2020

в моей системе Debian, обмен сообщениями CMAKE_SYSTEM_LIBRARY_PATH дает:

/usr/lib/w32api;/usr/X11R6/lib;/usr/lib/X11;/usr/pkg/lib;/opt/csw/lib;/opt/lib;/usr/openwin/lib

Что не похоже на то, что вы ожидаете от системы Debian. Как мне сделать, чтобы это значение было правильно установлено? это известная ошибка? Это приводит к тому, что любой вызов search_library терпит неудачу, так как путь не содержит usr / lib usr / local / lib ...

uname -a
Linux 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64 GNU/Linux

Я установил cmake by package, и поэтому я удивлен, что я Я единственный, кто жалуется на это. Может быть, каким-то образом cmake обманут, думая, что моя система не debian. Что мне делать? (Я знаю, что могу вручную настроить CMAKE_LIBRARY_PATH, но это своего рода побороть цель использования инструмента кросс-компиляции.

РЕДАКТИРОВАТЬ: Ну, это даже не работает, устанавливая CMAKE_LIBRARY_PATH (но я не могу найти много примеров, может быть, я использовать его неправильно), вот используемый cmakelist и вывод.

# here you see my attempts to correct the problem in a dirty way on my platform.
list(APPEND CMAKE_LIBRARY_PATH "/usr/local/lib" "/usr/lib" "/lib" "/usr/lib/x86_64-linux-gnu/coreutils/libstdbuf.so")

find_library (libstdbuf NAMES libstdbuf stdbuf libstdbuf.so)
if(NOT libstdbuf)
  message(WARNING "libstdbuf library not found in ${CMAKE_SYSTEM_LIBRARY_PATH}\nDid you install coreutils?. This mean that the timing attack wont be as precise as it could. ")
  set (libstdbuf NULL)
else()
  message ("lbstbuf detected at ${libstdbuf}")
endif()

Вывод:

CMake Warning at .cmakedependencies_set_up:5 (message):
  libstdbuf library not found in
  /usr/lib/w32api;/usr/X11R6/lib;/usr/lib/X11;/usr/pkg/lib;/opt/csw/lib;/opt/lib;/usr/openwin/lib


  Did you install coreutils?.  This mean that the timing attack wont be as
  precise as it could.
Call Stack (most recent call first):
  CMakeLists.txt:19 (include)

EDIT3: Очевидно, установка непосредственно CMAKE_LIBRARY_PATH работает, я думал, что он будет искать в подкаталоге, но Вы должны перечислить их (что отстой). Итак, теперь грязное исправление следующее:

# List subdir
MACRO(SUBDIRLIST result curdir)
  FILE(GLOB_RECURSE children LIST_DIRECTORIES true ${curdir}/* )

  SET(dirlist "")
  FOREACH(child ${children})
    IF(IS_DIRECTORY ${child})
      LIST(APPEND dirlist ${child})
    ENDIF()
  ENDFOREACH()

  SET(${result} ${dirlist})
ENDMACRO()

SUBDIRLIST (libpath1 /usr/local/lib)
SUBDIRLIST(libpath2 /usr/lib)
SUBDIRLIST(libpath3 /lib)

list(APPEND CMAKE_LIBRARY_PATH ${libpath1})
list(APPEND CMAKE_LIBRARY_PATH ${libpath2})
list(APPEND CMAKE_LIBRARY_PATH ${libpath3})

find_library (libstdbuf NAMES libstdbuf stdbuf libstdbuf.so)

Я действительно не понимаю Cmake. Почему, когда вы указываете ie, что библиотеки находятся в / lib, это не выглядит в подкаталогах? Если это не работает, я думаю, что даже если CMAKE_SYSTEM_LIBRARY_PATH правильно настроен на что-то вроде / usr / local / lib, / usr / lib / lib, он все равно не будет работать, потому что cmake не будет исследовать подкаталоги. Я уверен, что есть объяснение, и я не правильно использую find_library. Это должна быть функция, которая ищет библиотеки на стенде Они должны быть в используемой системе. Еще один бой против Cmake.

Кто-нибудь из мастеров Cmake попытался рассказать мне, как это работает?

Спасибо.

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