Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
1

Не получается заставить CMake работать с boost

25.07.2018, 02:03. Показов 3789. Ответов 1

Author24 — интернет-сервис помощи студентам
Сколько уже перечитал топиков - без толку. Не работает. Имеется:

- Windows 10
- CLion 2018.1.6
- CMake 3.12
- Boost 1.67.0
- mingw32-i686-8.1.0-release-posix-dwarf-rt_v6-rev0

Boost скачал с официального сайта. По инструкции https://theboostcpplibraries.c... stallation
я запустил из корневого каталога bootstrap.bat.
После этого добавил в PATH путь к компилятору запустил
bjam --toolset=gcc --build-type=complete --prefix=D:\Boost install

В CLion задал внешний CMake 3.12, вместо встроенного 3.10.3, т.к. прочитал,
что только версии CMake, вышедшие после релиза Boost,
могут корректно определять его предыдущие версии.

Далее создал проект с таким содержимым:

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <boost/filesystem.hpp>
 
using namespace boost::filesystem;
 
int main() {
    
    std::cout << file_size("C:/Users/Lyosha12/Desktop/Untitled 1.wav") << std::endl;
    
    return 0;
}

CMakeLists.txt

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cmake_minimum_required(VERSION 3.12)
project(Test_Boost_Filesystem)
 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17 -pedantic -Wall -Wextra")
set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc")
 
add_executable(Test_Boost_Filesystem main.cpp)
 
set(BOOST_ROOT "D:/Boost")
set(Boost_INCLUDE_DIR "${BOOST_ROOT}/include/boost-1_67")
set(Boost_LIBRARY_DIR "${BOOST_ROOT}/lib")
 
 
find_package(Boost 1.67.0)# COMPONENTS REQUIRED filesystem system)
 
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    target_link_libraries(Test_Boost_Filesystem ${Boost_LIBRARIES})
endif()


Boost находится, даже CLion определяет существование <boost/filesystem.hpp>.
Однако, как сказано в документации к Boost, filesystem нужно собирать, т.к. это не header-only библиотека.
Ну и при изменении find_package(Boost 1.67.0) на
find_package(Boost 1.67.0 COMPONENTS REQUIRED filesystem system)
Boost перестаёт находится, а я получаю эти ошибки:
Кликните здесь для просмотра всего текста
Код
D:\Programs\ProgrammingEnvironment\Compilers\CMake-3-12\bin\cmake.exe -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - MinGW Makefiles" D:\Programs\ProgrammingEnvironment\LocalProjects\Tests\Test-Boost-Filesystem
CMake Error at D:/Programs/ProgrammingEnvironment/Compilers/CMake-3-12/share/cmake-3.12/Modules/FindBoost.cmake:2044 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.67.0

  Boost include path: D:/Boost/include/boost-1_67

  Could not find the following Boost libraries:

          boost_filesystem
          boost_system

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.


Хотя в папке они существуют.

Подскажите пожалуйста верный путь
Миниатюры
Не получается заставить CMake работать с boost   Не получается заставить CMake работать с boost  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2018, 02:03
Ответы с готовыми решениями:

Boost::asio::read как заставить работать с таймаутом?
При чтении данных из порта, если нет ответа, то поток уходит в бесконечное ожидание. Может кто-то...

Не получается заставить работать сокеты по интернету
Помогите разобраться, никак не получается заставить работать сокеты по интернету. Если по порядку,...

FastProg программатор, не получается заставить работать
Всем доброго времени суток. Когда-то давно прикупил себе Fastprog программатор аналог mkii. Шил им...

Не получается заставить работать одновременно два jQuery решения
Установил галерею PhotoSwipe и есть меню с всплывающей картинкой при наведении на пункт - не хотят...

1
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
25.07.2018, 19:15  [ТС] 2
Пересобрал, используя
bootstrap.bat gcc
b2 -j8 -toolset=gcc install address-model=32 --build-type=complete --prefix="C:\Program Files (x86)\Boost"
Результат тот же - подключить filesystem не удаётся.
Что и где читать уже и не знаю, разве что другие инструменты использовать.

Добавлено через 38 минут
Забавно, заработало. Включил set(Boost_DEBUG 1), посмотрел какие библиотеки ищутся.
Убрал из названия файла -x32-1_67, сделав
libboost_filesystem-mgw81-mt-d.a и
libboost_system-mgw81-mt-d.a

Вопрос следующий: мне убрать из имён файлов все эти -x32-1_67
или есть не костыльный вариант? Может, пересобрать с другими ключами? Какими?

Добавлено через 1 час 4 минуты
Пересобрал так:
bjam -j8 toolset=gcc --build-type=complete --prefix=D:\Programs\ProgrammingEnvironment\Librares\boost_1_67_0\Build --layout=tagged address-model=32 install
Работает. Остался вопрос о варнингах при сборке моего проекта (при сборке буста они тоже были в изобилии):
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
D:\Programs\ProgrammingEnvironment\Compilers\CMake-3-12\bin\cmake.exe --build D:\Programs\ProgrammingEnvironment\LocalProjects\Tests\Test-Boost-Filesystem\cmake-build-release --target all -- -j 4
Scanning dependencies of target Test_Boost_Filesystem
[ 50%] Building CXX object CMakeFiles/Test_Boost_Filesystem.dir/main.cpp.obj
In file included from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/mpl/aux_/na_assert.hpp:23,
                 from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/mpl/arg.hpp:25,
                 from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/mpl/placeholders.hpp:24,
                 from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/iterator/iterator_categories.hpp:16,
                 from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/iterator/iterator_facade.hpp:13,
                 from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/filesystem/path.hpp:28,
                 from D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/filesystem.hpp:16,
                 from D:\Programs\ProgrammingEnvironment\LocalProjects\Tests\Test-Boost-Filesystem\main.cpp:2:
D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/mpl/assert.hpp:188:21: warning: unnecessary parentheses in declaration of 'assert_arg' [-Wparentheses]
 failed ************ (Pred::************
                     ^
D:/Programs/ProgrammingEnvironment/Librares/boost_1_67_0/Build/include/boost/mpl/assert.hpp:193:21: warning: unnecessary parentheses in declaration of 'assert_not_arg' [-Wparentheses]
 failed ************ (boost::mpl::not_<Pred>::************
                     ^
[100%] Linking CXX executable Test_Boost_Filesystem.exe
[100%] Built target Test_Boost_Filesystem


Если перейти к этому файлу, то там:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
template< typename Pred >
failed ************ (boost::mpl::not_<Pred>::************ 
      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )
    );

Очевидно, вторая скобка присутствует, но MinGW считает иначе.
Просто заглушить это предупреждение на уровне компилятора?
Или можно это сделать конкретно для буста?

Добавлено через 2 часа 14 минут
Без особой "боли" добавил SYSTEM и забыл о проблеме.
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
0
25.07.2018, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2018, 19:15
Помогаю со студенческими работами здесь

Boost и Cmake
Я пытаюсь подключить Boost к проекту с использованием Cmake. Получается, что-то в этом роде: ...

Boost & CMake
Проблема, наверно больше в CMake, нежели в бусте. В общем имеем симейковский файл вида: ...

Boost + Cmake + Clion
Помогите мне подключить Boost к Clion на Windows. Перепробовал уже кучу вариантов - ничего не...

Boost pre build vs cmake find
это кусок Cmake. set(BOOST_ROOT &quot;C:/local/boost_1_55_0&quot;) set(Boost_USE_STATIC_LIBS OFF)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru