CMake错误:TARGETS没有为共享库目标提供LIBRARY DESTINATION

Stu*_*erg 35 cmake lemon-graph-library

在使用CMake构建一个开源项目时(在我的例子中,它是柠檬图库),当我尝试通过-DBUILD_SHARED_LIBS=1以下方式构建共享库时出现此错误:

TARGETS given no LIBRARY DESTINATION for shared library target
Run Code Online (Sandbox Code Playgroud)

这个错误来自哪里,我该如何解决?

Stu*_*erg 37

在我的CMakeLists.txt,我的INSTALL命令没有LIBRARY参数.

从这改变:

INSTALL(
  TARGETS lemon
  ARCHIVE DESTINATION lib
  COMPONENT library
)
Run Code Online (Sandbox Code Playgroud)

对此:

INSTALL(
  TARGETS lemon
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib  # <-- Add this line
  COMPONENT library
)
Run Code Online (Sandbox Code Playgroud)

解决了我的问题.


Fer*_*hez 15

我得到了这个......发生这种情况的另一个原因是你创建了一个共享库

add_library($ {NAME} SHARED来源)

然后当Cmake在Windows平台上达到安装命令时,它会抱怨这些错误,解决方法是使用RUNTIME而不是LIBRARY,就像

if(WIN32)
  install(TARGETS ${NAME}
    RUNTIME DESTINATION path)
else()
  install(TARGETS ${NAME}
    LIBRARY DESTINATION path)
endif()  
Run Code Online (Sandbox Code Playgroud)


Jay*_*llo 5

之后DESTINATION,应该有bin,,libinclude

安装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
)
Run Code Online (Sandbox Code Playgroud)

例如,安装.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}
)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅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)
Run Code Online (Sandbox Code Playgroud)