У меня есть проект, который построен с использованием cmake.
Этот проект использует avr-gcc для компиляции двоичных файлов, и я использую boost mpl для некоторых его частей.
Так как avr-gcc не имеет / usr / include в качестве пути включения по умолчанию, но там установлен boost, мне нужно добавить его как путь включения, чтобы был найден boost.
К сожалению, добавление -I / usr / include к командной строке приводит к извлечению всех других файлов и каталогов в / usr / include, что, похоже, приводит к конфликтам с avr include и, следовательно, к ошибкам компилятора.
Мое первоначальное решение включало мягкую ссылку на / usr / include / boost в одном из моих пользовательских каталогов include для разрешения
#include <boost/mpl/*>
Однако я подумал, что это не очень зависит от платформы, и решил, что cmake добавит путь включения для boost. Это снова привело к присутствию «-I / usr / include» в команде компилятора.
Как мне решить эту проблему независимо от платформы?
Решением было бы позволить cmake создать ссылку для меня, чтобы получить правильный каталог include.
Тем не менее, я считаю, что решение по символическим ссылкам в целом ужасно.
Есть ли что-то лучшее, что я могу сделать?
Например: есть ли опция, которая добавляет путь включения под псевдонимом, например:
-I/usr/include/boost:boost
Который добавил бы только подпапку boost под названием boost, чтобы быть включенным #include <boost/...>
Директива?
Я вижу как минимум два варианта для вас:
Где же avr-gcc
включать файлы по умолчанию? Скажем так /opt/avr-gcc/include
для конкретности. Тогда то, что может работать для вас -I/opt/avr-gcc/include -I/usr/include
,
Другой вариант — установить Boost в другой каталог и использовать его вместо Boost в /usr/include
, Например, вы можете создать /opt/boost
а затем использовать -I/opt/boost
(или подкаталог под этим) в командной строке.
Других решений пока нет …