Как связать статическую библиотеку в cmake, созданную из другого каталога? - PullRequest
1 голос
/ 06 июля 2019

У меня есть следующая упрощенная структура каталогов для моего проекта cmake

- project/
  - src/
    - network/
      - network.hpp
      - network.cpp
      - CMakeLists.txt
    - CMakeLists.txt
  - test/
    - network_test.cpp
    - CMakeLists.txt
- CMakeLists.txt

В project/src/network/CMakeLists.txt, статический библиотека network создается

add_library(network STATIC "")
target_sources(network
        PUBLIC
        network.hpp
        PRIVATE
        network.cpp)
target_include_directories(network PRIVATE ${Boost_INCLUDE_DIR})
target_link_libraries(network PRIVATE pthread)
target_link_libraries(network PRIVATE OpenSSL::SSL)

В project/test/network_test.cpp,Однако мне нужно установить связь с сетевой библиотекой, поскольку целевая сеть находится в другом каталоге, хотя следующее не может успешно связать network_cpp с network.

Верхний уровень CMakeList.txt

cmake_minimum_required(VERSION 3.13)

project(Argon)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_subdirectory(src)

add_subdirectory(test)

src / network / CMakeList.txt

add_library(network STATIC "")
target_sources(network
        PUBLIC
        network.hpp
        PRIVATE
        network.cpp)
target_include_directories(network PRIVATE ${Boost_INCLUDE_DIR})
target_link_libraries(network PRIVATE pthread)
target_link_libraries(network PRIVATE OpenSSL::SSL)

test / network_test / CMakeList.txt

add_executable(network_test network_test.cpp)
target_link_libraries(network_test PRIVATE GTest::GTest)
target_link_libraries(network_test PRIVATE network)
enable_testing()
add_test(NAME google_test
        COMMAND $<TARGET_FILE:network_test>)

Произошла следующая ошибка:

usr/bin/ld: CMakeFiles/network_test.dir/network_test.cpp.o: in function `network_cpp_get_HEAD_does_not_throw_Test::TestBody()':
/home/bill/CLionProjects/Argon/test/network/network_test.cpp:8: undefined reference to `Argon::network::get_HEAD(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::asio::io_context&)'

Какое решение для этого?Или структура моего проекта несовершенна?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...