CMake错误:没有为共享库目标指定库目标

CMake错误:没有为共享库目标指定库目标,cmake,lemon-graph-library,Cmake,Lemon Graph Library,在使用CMake构建开源项目时(在我的例子中,它是lemon graph库),当我试图通过-DBUILD\u shared\u LIBS=1构建共享库时,我遇到了这个错误: TARGETS given no LIBRARY DESTINATION for shared library target 此错误来自何处以及如何修复它?在我的CMakeLists.txt中,我的安装命令没有库参数 改变这一点: INSTALL( TARGETS lemon ARCHIVE DESTINATION

在使用CMake构建开源项目时(在我的例子中,它是lemon graph库),当我试图通过
-DBUILD\u shared\u LIBS=1构建共享库时,我遇到了这个错误:

TARGETS given no LIBRARY DESTINATION for shared library target

此错误来自何处以及如何修复它?

在我的
CMakeLists.txt
中,我的安装命令没有库参数

改变这一点:

INSTALL(
  TARGETS lemon
  ARCHIVE DESTINATION lib
  COMPONENT library
)
为此:

INSTALL(
  TARGETS lemon
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib  # <-- Add this line
  COMPONENT library
)
安装(
目标是柠檬
存档目标库

库目标库35;我得到了这个…发生这种情况的另一个原因是当您创建共享库时

添加库(${NAME}共享源)

然后,当Cmake在Windows平台上到达install命令时,它会抱怨这些错误,解决方案是使用运行时而不是库,如

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

目的地
之后,它应该有
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}
)
有关更多详细信息,请参见:

install(TARGETS myExe mySharedLib myStaticLib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)

我刚刚遇到了一个类似的问题。正如@Fernando在他的回答中所说的,你可以使用这个解决方案。另一个类似的解决方案是只
包含(GNUInstallDirs)


我认为您的意思是“
RUNTIME
而不是
LIBRARY
”。在您的示例中,
path
的两种用法是否不同?如果不是,您可以通过
install(TARGETS${NAME}RUNTIME DESTINATION path LIBRARY DESTINATION path)实现相同的效果
我也遇到了同样的问题,只是添加了。更优雅的方式是,${CMAKE\u INSTALL\u INCLUDEDIR}未定义
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}
)