Сделать не удается найти файл .hpp в Boost

#c #ubuntu #boost #makefile

Вопрос:

Я использую виртуальную машину Ubuntu и сталкиваюсь со следующим сообщением об ошибке при выполнении команды «сделать»:

 Scanning dependencies of target AIToolboxMDP
[  1%] Building CXX object src/CMakeFiles/AIToolboxMDP.dir/Impl/Seeder.cpp.o
[  1%] Building CXX object src/CMakeFiles/AIToolboxMDP.dir/Impl/CassandraParser.cpp.o
In file included from /home/ben/AI/AI-Toolbox-master/include/AIToolbox/Impl/CassandraParser.hpp:4,
                 from /home/ben/AI/AI-Toolbox-master/src/Impl/CassandraParser.cpp:1:
/home/ben/AI/AI-Toolbox-master/include/AIToolbox/Types.hpp:7:10: fatal error: boost/multi_array.hpp: No such file or directory
    7 | #include <boost/multi_array.hpp>
      |          ^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/CMakeFiles/AIToolboxMDP.dir/build.make:76: src/CMakeFiles/AIToolboxMDP.dir/Impl/CassandraParser.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1140: src/CMakeFiles/AIToolboxMDP.dir/all] Error 2
make: *** [Makefile:95: all] Error 2
 

Я запустил cmake прямо перед make, и cmake смог найти Boost; Я также вижу, что файл multi_array.hpp находится в папке /home/ben/AI/boost_1_77_0/boost, поэтому я не уверен, почему make не может найти файл. Я пробовал добавлять изменения линии target_link_libraries(program ${Boost_LIBRARIES}) в CMakeLists.txt файл и с помощью вариации -л/-ль варианты, сделать вызов, и ни один из методов не работал (хотя я не был уверен, что имя программы для использования с target_link_libraries поэтому я перепробовала кучу догадок, но, возможно, я не использовал правильный; я пытаюсь построить ИИ-инструментов, если это помогает).

Мне также нужно добавить несколько опций в команду cmake, которую я запускаю прямо перед тем, как сделать, чтобы избавиться от любых ошибок с этим; вот что я ввожу на случай, если это что-то сделает или если мне нужно добавить что-то еще:

cmake .. -DBOOST_ROOT=/home/ben/AI/boost_1_77_0 -DLPSOLVE_INCLUDE_PATH=/home/ben/AI/lpsolve -DVCPKG_TARGET_TRIPLET=x64-linux -DCMAKE_TOOLCHAIN_FILE=/home/ben/AI/vcpkg/scripts/buildsystems/vcpkg.cmake

Мой CMakeLists.txt файл содержит следующие строки (среди прочих, но они кажутся наиболее релевантными) на всякий случай, если это тоже поможет:

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

У кого-нибудь есть какие-либо идеи о том, как я могу преодолеть ошибку «Сделать»?

Комментарии:

1. Вы проверили -I , где должен быть путь повышения ?

2. Я попытался позвонить make -I /home/ben/AI/boost_1_77_0/boost (как с последней boost папкой, так и без нее), но получил ту же ошибку. Ты это имел в виду или имел в виду что-то другое?

3. Чтобы получить его, вам нужно будет проверить собственные файлы makefile, созданные cmake. -DBOOST_ROOT=/home/ben/AI/boost_1_77_0 также отсутствует последний boost каталог

4. Добавление -I в командную строку make не сработает. Это указывает make, где искать включенные файлы make (которые вам не нужны). Он не сообщает вашему компилятору, где искать включенные файлы заголовков C .

5. В итоге я решил эту проблему, удалив папку Boost и переустановив ее с помощью команды sudo apt-get install libboost-all-dev ; Я просто перезапустил cmake и удалил все параметры, которые использовал, за исключением lpsolve, а затем, когда я запустил make, я не столкнулся с проблемами. Спасибо за помощь!

Ответ №1:

В итоге я решил эту проблему, удалив свою папку Boost и переустановив ее с помощью команды sudo apt-get install libboost-all-dev ; Я просто перезапустил cmake и удалил все параметры, которые я использовал, за исключением lpsolve, а затем, когда я запустил make, я не столкнулся с проблемами.