Я новичок в использовании cmake и в качестве эксперимента пытаюсь связать libcucumber- cpp .a в моем тестовом объекте, но он выдает ошибки связывания в библиотеке повышения для неопределенных символов. Я предполагаю, что статически связанная библиотека должна иметь все свои ссылки.
Мой CMakeLists.txt
cmake_minimum_required(VERSION 3.1...3.15)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()
cmake_policy(VERSION 3.15)
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_STANDARD 11)
project(MyTestCalc VERSION 1.0
DESCRIPTION "A Simple Calculator"
LANGUAGES CXX)
# Using googletest repo
add_subdirectory(lib/googletest)
find_package(Boost)
if(Boost_FOUND)
message("Boost is FOUND")
endif()
# My test c++ shared lib
ADD_LIBRARY(mycalc SHARED IMPORTED)
SET_TARGET_PROPERTIES(mycalc PROPERTIES
IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/mycalc/libcalc.so
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/lib/mycalc/include")
# Cucumber-cpp statis lib
ADD_LIBRARY(cucumber-cpp STATIC IMPORTED)
SET_TARGET_PROPERTIES(cucumber-cpp PROPERTIES
IMPORTED_LOCATION /home/user/cucumber-cpp/build/src/libcucumber-cpp.a
INTERFACE_INCLUDE_DIRECTORIES "/home/user/cucumber-cpp/include;/home/murali/cucumber-cpp/build/src/"
INTERFACE_LINK_LIBRARIES "${Boost_LIBRARIES}")
enable_testing()
add_executable(CalcTestSteps features/step_definitions/CalcTestSteps)
target_link_libraries(CalcTestSteps PUBLIC mycalc gtest ${Boost_LIBRARIES} cucumber-cpp)
При сборке я получаю следующую ошибку:
/home/user/cucumber-cpp/build/src/libcucumber-cpp.a(Regex.cpp.o): In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
Regex.cpp:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j]+0x2a): undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
Моя цель зависит ТОЛЬКО от gtest и cucumber- cpp, но cucumber- cpp зависит от наддува. По сути, я не должен был включать в свой проект CMakeLists.txt зависимость для повышения.
Как я могу решить эту проблему? Любые указатели будут действительно полезны.