2

Я собираю довольно большой проект из исходного кода. Компиляция всегда заканчивается: error: неверное преобразование из 'const char *' в 'char *' [-fpermissive]

Я уже скомпилировал этот проект год назад. Так что я знаю решение этого. На самом деле я нашел больше решений:

  1. Добавление Typecast к соответствующей строке кода cpp (Это привело к бесконечному количеству изменений в каждом файле. Поэтому я нашел следующее решение.)
  2. Изменение make-файла для компиляции этого файла с параметром -fpermissive. (Мне пришлось изменить много строк в каждом make-файле. Поэтому я нахожу еще лучшее решение.)
  3. «g ++» или "gcc" хранились в переменной, поэтому я добавил -fpermissive к этим переменным.

Это лучшее решение, которое у меня есть. Достаточно добавить эту опцию к каждому make-файлу один раз. К сожалению, это программное обеспечение имеет большое количество подкаталогов. Поэтому мне нужно изменить более 100 make-файлов. Это заняло у меня целый день год назад.

Есть ли способ, как сделать это быстрее.

Как насчет этого? alias gcc = 'gcc -fpermissive' Я не знаком с псевдонимами. Но это должно быть легко попробовать. Правильный ли синтаксис? И это правильно? псевдоним g++ = 'g++ -fpermissive'? И нужно ли как-то экспортировать псевдоним? Будет ли программа make уважать псевдоним?

Должен ли я изменить скрипт ./configure? Или ./configure.in? Или другой файл?

2 ответа2

2

Псевдонимы проще всего настроить, поместив соответствующую строку в файл ~/.bashrc . Когда вы вводите команду, BASH будет искать в вашем $PATH первый экземпляр исполняемого файла с таким именем. Псевдонимы в вашем файле ~/.bashrc всегда будут найдены первыми, поэтому, если у вас есть псевдоним с тем же именем, что и у фактической команды (например, gcc), псевдоним будет выполнен.

Итак, в вашем случае добавьте эти строки в ваш ~/.bashrc (да, синтаксис правильный):

alias gcc='gcc -fpermissive'
alias g++='g++ -fpermissive'

В качестве альтернативы, вы можете сделать разные псевдонимы, чтобы вы могли выбрать, хотите ли вы флаг -fpermissive или нет:

alias gcc_per='gcc -fpermissive'
alias g++_per='g++ -fpermissive'

Таким образом, вы можете использовать gcc для запуска /usr/bin/gcc или gcc_per для запуска /usr/bin/gcc -fpermissive соответствии с вашими потребностями. Очевидно, вы можете установить псевдоним на что хотите, имя зависит от вас.

Как только вы добавили соответствующие строки в ваш ~/.bashrc , либо отправьте его (source ~/.bashrc), либо просто откройте новый терминал, и вы создадите новые псевдонимы и будете готовы к работе.

2

Старый вопрос, я знаю, но для дальнейшего использования:

Псевдонимы gcc и g++ в .bashrc не будут работать в make . Однако вы можете перезаписать переменные make CC и CXX из .bashrc:

export CC="gcc -fpermissive"
export CXX="g++ -fpermissive"

Это, конечно, требует от вас использования $(CC) и $(CXX) в явных правилах вашего make-файла, но вы все равно должны это делать. Они используются в неявных правилах по умолчанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .