it-swarm-ja.com

エイリアスgcc = 'gcc-fpermissive'または変更する./configureスクリプト

私はソースからかなり大きなプロジェクトをコンパイルしています。コンパイルは常に次のように終了します:エラー:「constchar *」から「char *」への無効な変換[-fpermissive]

私はすでに1年前にこのプロジェクトをまとめました。だから私はこれに対する解決策を知っています。実際、私はもっと多くの解決策を見つけました:

  1. Cppコードの適切な行にタイプキャストを追加します(各ファイルで無限の変更が加えられたため、次の解決策を見つけました)。
  2. -fpermissiveオプションを使用してそのファイルをコンパイルするようにmakefileを変更します。 (各makefileの多くの行を変更する必要があったので、さらに良い解決策を見つけました。)
  3. 「g ++」または「gcc」は変数に格納されていたので、これらの変数に-fpermissiveを追加しました。

これは私が持っている最良の解決策です。このオプションを各メイクファイルに1回追加するだけで十分です。残念ながら、このソフトウェアには多数のサブディレクトリがあります。したがって、100を超えるメイクファイルを変更する必要があります。 1年前は丸一日かかりました。

これをより速く行う方法はありますか?.

これはどうですか? alias gcc = 'gcc-fpermissive'私はエイリアスに精通していません。しかし、これを試すのは簡単なはずです。構文は正しいですか?そして、これは正しいですか?エイリアスg ++ = 'g ++ -fpermissive'?そして、どういうわけかエイリアスをエクスポートする必要がありますか? makeプログラムはエイリアスを尊重しますか?

./configureスクリプトを変更する必要がありますか?または./configure.in?または他のファイル?

2
robo

エイリアスは、~/.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
terdon

古い質問、私は知っていますが、将来の参考のために:

_g++_のgccと_.bashrc_のエイリアスは、make内では機能しません。ただし、_.bashrc_内からmakeの変数CCおよびCXXを上書きできます。

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

もちろん、メイクファイルの明示的なルールで$(CC)$(CXX)を使用する必要がありますが、とにかくそうする必要があります。これらは、デフォルトで暗黙のルールで使用されます。

2