Подтвердить что ты не робот

Ошибка CMake: значения TARGETS не заданы для LIBRARY DESTINATION для цели общей библиотеки

При создании проекта с открытым исходным кодом с CMake (в моем случае это была библиотека лимонного графа), я получил эту ошибку, когда пытался создать общие библиотеки с помощью -DBUILD_SHARED_LIBS=1:

TARGETS given no LIBRARY DESTINATION for shared library target

Откуда возникает эта ошибка и как ее исправить?

4b9b3361

Ответ 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)