псевдоним gcc = 'gcc -fpermissive' или модифицирующий скрипт ./configure

6014
robo

Я собираю довольно большой проект из исходного кода. Компиляция всегда заканчивается: 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
terdon

Псевдонимы проще всего настроить, поместив соответствующую строку в ваш ~/.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), либо просто откройте новый терминал, и ваши новые псевдонимы настроены и готовы к работе.

Из того, что я могу сказать, `make` не будет уважать псевдоним. Jonas 8 лет назад 0
2
Jonas

Old question, I know, but for future reference:

Aliasing gcc and g++ in the .bashrc will not working within make. You can however overwrite make's variables CC and CXX from within the .bashrc:

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

That of course requires you to use $(CC) and $(CXX) in explicit rules in your makefile, but you should do that anyway. They are used in the implicit rules by default.

Похожие вопросы