#c #boost #clion
Вопрос:
Я настраиваю проект C 17 boost 1.76.0 в Clion 2018.3 с этим минимальным кодом:
#include <boost/asio/ip/tcp.hpp>
int main(int argc, char **argv)
{
auto const address = boost::asio::ip::make_address(argv[1]);
return 0;
}
В моем CMakeLists.txt Я правильно настроил версию C :
add_definitions(-std=c 17)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c 17")
И проект компилируется и работает нормально. Но Clion показывает следующую ошибку в строке make_address:
Нет члена с именем «make_address» в пространстве имен «boost::asio::ip»
CTRL-при наведении курсора мыши на имя метода правильно отображается документ, а CTRL-щелчок правильно открывает файл заголовка.
Мы должны сделать что-то еще, чтобы сообщить Клиону, какую версию C мы используем?
Ответ №1:
Похоже, что IDE и компилятор не согласны в версии boost. Эти функции не являются специфичными для языковой версии, но я думаю, что они были представлены в относительно недавнем выпуске Boostt
Ответ №2:
Оказалось, что в системе было установлено 2 версии Boost, одна из которых поставляется с ROS (я этого не знал) и версия v1.76.0, которую я скомпилировал, чтобы получить boost::asio. Похоже, Клион использовал тот, что был старше РОС.
Удаление версии v1.76.0 в масштабах всей системы и добавление ее обратно в качестве библиотеки заголовков в проекте исправили эти ложные ошибки, хотя теперь для анализа кода Clion требуется вечность (несмотря на то, что я исключил папку libs). Использование только версии, поставляемой с ROS, было бы лучшим решением для тех, кому не нужны последние дополнения Boost (но я это делаю).