将动态库链接到可执行文件的Cmake文件

将动态库链接到可执行文件的Cmake文件,cmake,dynamic-library,Cmake,Dynamic Library,我正在尝试为我的项目制作一个cmake文件,只是为了学习如何制作cmake文件 我的目录结构。我得到一个错误: square_and_add |- src | |- <Some source files> |- libsrc | |- include | |- <library header files> | |- src | |- <library source files> |- build |- libs |- <installed librari

我正在尝试为我的项目制作一个cmake文件,只是为了学习如何制作cmake文件

我的目录结构。我得到一个错误:

square_and_add
|- src
| |- <Some source files>
|- libsrc
| |- include
| |- <library header files>
| |- src
| |- <library source files>
|- build
|- libs
|- <installed libraries>
我得到了这个错误

/usr/bin/ld:找不到-l./build/dynamic\u库 collect2:错误:ld返回了1个退出状态 CMakeFiles/dynamic_lib_exec.dir/build.make:85:目标'sqnadd_dyn_lib'的配方失败


以下是我做这些事情的方法:

cmake_minimum_required(VERSION 2.6)
project(SQUARE_AND_ADD)
set(CMAKE_CXX_FLAGS "-g -Wall")

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libsrc/include)

set(EXEC_NAME_BASE "sqnadd")
set(EXEC_NOLIB_NAME "${EXEC_NAME_BASE}_no_lib")
set(EXEC_STATICLIB_NAME "${EXEC_NAME_BASE}_stat_lib")
set(EXEC_SHAREDLIB_NAME "${EXEC_NAME_BASE}_dyn_lib")

set(STATICLIB_NAME "square_static")
set(SHAREDLIB_NAME "square_shared")


# if no lib, then just compile the square.cc into the executable
add_executable(${EXEC_NOLIB_NAME} src/main.cc libsrc/src/square.cc)


add_library(${STATICLIB_NAME} STATIC libsrc/src/square.cc)

add_executable(${EXEC_STATICLIB_NAME} src/main.cc)
target_link_libraries(${EXEC_STATICLIB_NAME} ${STATICLIB_NAME} )


add_library(${SHAREDLIB_NAME} SHARED libsrc/src/square.cc)

add_executable(${EXEC_SHAREDLIB_NAME} src/main.cc)
target_link_libraries(${EXEC_SHAREDLIB_NAME} ${SHAREDLIB_NAME})


# installing libraries:
install(TARGETS ${SHAREDLIB_NAME} ${STATICLIB_NAME}
        RUNTIME DESTINATION lib CONFIGURATIONS debug)

# installing executables
install(TARGETS ${EXEC_NOLIB_NAME} 
                ${EXEC_STATICLIB_NAME} 
                ${EXEC_SHAREDLIB_NAME}
        RUNTIME DESTINATION bin
        CONFIGURATIONS debug)

以下是我做这些事情的方法:

cmake_minimum_required(VERSION 2.6)
project(SQUARE_AND_ADD)
set(CMAKE_CXX_FLAGS "-g -Wall")

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libsrc/include)

set(EXEC_NAME_BASE "sqnadd")
set(EXEC_NOLIB_NAME "${EXEC_NAME_BASE}_no_lib")
set(EXEC_STATICLIB_NAME "${EXEC_NAME_BASE}_stat_lib")
set(EXEC_SHAREDLIB_NAME "${EXEC_NAME_BASE}_dyn_lib")

set(STATICLIB_NAME "square_static")
set(SHAREDLIB_NAME "square_shared")


# if no lib, then just compile the square.cc into the executable
add_executable(${EXEC_NOLIB_NAME} src/main.cc libsrc/src/square.cc)


add_library(${STATICLIB_NAME} STATIC libsrc/src/square.cc)

add_executable(${EXEC_STATICLIB_NAME} src/main.cc)
target_link_libraries(${EXEC_STATICLIB_NAME} ${STATICLIB_NAME} )


add_library(${SHAREDLIB_NAME} SHARED libsrc/src/square.cc)

add_executable(${EXEC_SHAREDLIB_NAME} src/main.cc)
target_link_libraries(${EXEC_SHAREDLIB_NAME} ${SHAREDLIB_NAME})


# installing libraries:
install(TARGETS ${SHAREDLIB_NAME} ${STATICLIB_NAME}
        RUNTIME DESTINATION lib CONFIGURATIONS debug)

# installing executables
install(TARGETS ${EXEC_NOLIB_NAME} 
                ${EXEC_STATICLIB_NAME} 
                ${EXEC_SHAREDLIB_NAME}
        RUNTIME DESTINATION bin
        CONFIGURATIONS debug)

为什么不直接使用
target\u link\u库(dynamic\u lib\u exec build\u dynamic\u lib)
?为什么不直接使用
target\u link\u库(dynamic\u lib\u exec build\u dynamic\u lib)