Ошибка CMake: значения TARGETS не заданы для LIBRARY DESTINATION для цели общей библиотеки
При создании проекта с открытым исходным кодом с CMake (в моем случае это была библиотека лимонного графа), я получил эту ошибку, когда пытался создать общие библиотеки с помощью -DBUILD_SHARED_LIBS=1
:
TARGETS given no LIBRARY DESTINATION for shared library target
Откуда возникает эта ошибка и как ее исправить?
Ответы
Ответ 1
В моей CMakeLists.txt
моя команда INSTALL не имела параметра LIBRARY.
Изменив это:
INSTALL(
TARGETS lemon
ARCHIVE DESTINATION lib
COMPONENT library
)
:
INSTALL(
TARGETS lemon
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib # <-- Add this line
COMPONENT library
)
исправлена моя проблема.
Ответ 2
Я получил это... Другая причина, по которой это происходит, - это создать общую библиотеку
add_library ($ {NAME} SHARED-источники)
тогда, когда Cmake достигает команды установки на платформе Windows, он жалуется на эту ошибку, решение заключается в использовании RUNTIME вместо LIBRARY, например
if(WIN32)
install(TARGETS ${NAME}
RUNTIME DESTINATION path)
else()
install(TARGETS ${NAME}
LIBRARY DESTINATION path)
endif()
Ответ 3
После DESTINATION
он должен содержать bin
, lib
, include
.
установить lib
или bin
install(TARGETS snappy
EXPORT SnappyTargets
# RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # DESTINATION error
RUNTIME DESTINATION bin ${CMAKE_INSTALL_BINDIR} # should add bin or other dir
LIBRARY DESTINATION lib ${CMAKE_INSTALL_LIBDIR}
# ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR # DESTINATION error
ARCHIVE DESTINATION lib ${CMAKE_INSTALL_LIBDIR} # should add lib
)
Например, установите файл .h
:
install(
FILES
"${PROJECT_SOURCE_DIR}/test_hard1.h"
"${PROJECT_BINARY_DIR}/config.h"
# DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} # error install FILES given no DESTINATION!
# add include after DESTINATION, then it works
DESTINATION include ${CMAKE_INSTALL_INCLUDEDIR}
)
подробнее см. https://cmake.org/cmake/help/v3.0/command/install.html:
install(TARGETS myExe mySharedLib myStaticLib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)