【问题标题】:CMake Error: TARGETS given no LIBRARY DESTINATION for shared library targetCMake 错误:TARGETS 没有为共享库目标指定 LIBRARY DESTINATION
【发布时间】:2013-02-06 01:45:57
【问题描述】:

在使用 CMake 构建开源项目时(在我的例子中,它是柠檬图形库),当我尝试通过 -DBUILD_SHARED_LIBS=1 构建共享库时遇到此错误:

TARGETS given no LIBRARY DESTINATION for shared library target

这个错误是从哪里来的,我该如何解决?

【问题讨论】:

标签: cmake lemon-graph-library


【解决方案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} 共享资源)

    然后当 Cmake 在 Windows 平台上执行 install 命令时,它会抱怨这些错误,解决方法是使用 RUNTIME 而不是 LIBRARY,比如

    if(WIN32)
      install(TARGETS ${NAME}
        RUNTIME DESTINATION path)
    else()
      install(TARGETS ${NAME}
        LIBRARY DESTINATION path)
    endif()  
    

    【讨论】:

    • 我认为您的意思是“RUNTIME 而不是 LIBRARY”。
    • 您的示例中path 的两种用法是否不同?如果没有,您可以使用install(TARGETS ${NAME} RUNTIME DESTINATION path LIBRARY DESTINATION path ) 达到相同的效果
    【解决方案3】:

    DESTINATION之后,应该有binlibinclude

    安装libbin

    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)
    

    【讨论】:

    【解决方案4】:

    我刚刚遇到了类似的问题。正如@Fernando 在他的回答中所说,您可以采用该解决方案。另一个类似的解决方案是 include(GNUInstallDirs)

    include(GNUInstallDirs)
    install(TARGETS ${PROJECT_NAME}
        EXPORT "${PROJECT_NAME}Config"
        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )
    

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 2016-12-30
      • 1970-01-01
      • 2018-09-19
      • 2016-01-27
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2014-01-31
      相关资源
      最近更新 更多