в моей системе 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 попытался рассказать мне, как это работает?
Спасибо.