Как использовать Boost Multiprecision в проекте CMake?C++

Программы на C++. Форум разработчиков
Anonymous
 Как использовать Boost Multiprecision в проекте CMake?

Сообщение Anonymous »

Я хочу использовать Boost Multiprecision в своем проекте на C++, но не могу. Я подозреваю, что не добавил правильные зависимости в свою корневую конфигурацию CMakeLists.txt, соответствующая часть которой выглядит следующим образом:

Код: Выделить всё

cmake_minimum_required(VERSION 3.30.0)
project(MyProject VERSION 1.0.0 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_subdirectory(src)
add_subdirectory(app)
add_subdirectory(test)

find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(MPFR REQUIRED)
include_directories(${MPFR_INCLUDE_DIRS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
Я обязательно связал библиотеки для моего исполняемого файла в app/CMakeLists.txt:

Код: Выделить всё

add_executable(main main.cpp)
target_link_libraries(main PRIVATE myLib)
target_link_libraries(main ${Boost_LIBRARIES})
target_link_libraries(main ${MPFR_LIBRARIES})
и для моей библиотеки в src/CMakeLists.txt:

Код: Выделить всё

file(GLOB HEADER_LIST CONFIGURE_DEPENDS "${MyProject_SOURCE_DIR}/include/*.h")
add_library(myLib SomeFile.cpp ${HEADER_LIST})
target_include_directories(myLib PUBLIC ../include)
target_link_libraries(myLib ${Boost_LIBRARIES})
target_link_libraries(myLib ${MPFR_LIBRARIES})
Я проверил, что Boost и MPFR установлены в моей системе через менеджер пакетов.
Мой линтер () не выдает ошибок, когда я включаю необходимые заголовки и использую тип multiprecision:

Код: Выделить всё

#include 
// ...

int main() {
IOParser parser;
// ...
}
Но когда я компилирую свою программу, я получаю несколько неопределенных ссылок на различные функции MPFR, такие как:

Код: Выделить всё

[build] /usr/bin/ld: CMakeFiles/main.dir/main.cpp.o: in function `boost::multiprecision::backends::detail::mpfr_float_imp::operator=(boost::multiprecision::backends::detail::mpfr_float_imp&&) [clone .isra.0]':
[build] main.cpp:(.text+0x2dc): undefined reference to `mpfr_swap'
[build] /usr/bin/ld: main.cpp:(.text+0x30c): undefined reference to `mpfr_set4'
[build] /usr/bin/ld: main.cpp:(.text+0x386): undefined reference to `mpfr_init2'
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ke-project

Вернуться в «C++»