コンパイルする前に、ツールチェーンにカスタムツールを追加してUTF-8 BOMを削除する

StackOverflow https://stackoverflow.com/questions/3127174

質問

私の質問は、Code :: Blocksとその微調整バージョンのMingwとNotepad ++のコンテキストにあります。

UTF-8を使用してBOMを使用しない限り、私のソースにユニコードリテラルを含めることができます。

これは正常に機能しますが、ファイルを再開するたびに(ひどいしゃれ)(悪いしゃれ)。 (当然のことながら)ANSI形式でUnicodeを表示するというこの副作用のない副作用があります。 :(

非常に便利でありながら非常に迷惑な3バイトがそこにいなければならないので、行かなければなりません! (コンパイル時に)。

簡単に聞こえますが、ソースファイルを前処理し、最初の3バイトを破棄します(UTF-8 BOMの場合)...

私は確かにコンパイルするたびにプロセッサになるつもりはないので、これらのリテラルにbom-less #includeファイルを使用することにも頼りましたが、これはいくつかの観点から問題があります。それはそれがことわざの痛みであり、私はそれらを「見る」ことができないということです! ..多くのジャグリングなしで。

カスタムプリプロセッサを使用してツールチェーンを活用できる方法はありますか? ...または、私がいくつかの明らかな解決策を逃した場合、私はそれについて聞いてとても感謝しています。

役に立ちましたか?

解決 2

私はもう少しフォシックをしました、そして、私は暫定的な解決策を解決しました。ソースの変更を伴うため、私は完全に満足していませんが、実際に配管されたソリューションを探していましたが、g ++。EXEはコマンドラインのargのみを受け入れるようです(間違っている場合は修正してください)。

私の「ソリューション」は少し荒く準備ができていますが、それは機能し、私が出会った他のどの実行可能なソリューションよりも確かに優れています(それはありません!)編集者に十分な注意を払う必要があります「ファイルは外部から変更されています」メッセージボックス(ファイルが編集されている場合)がありますが、実際にはBOMはまだエディターにあるため、やや重要なポイントです。

シンプルなコマンドラインハックです。私はより統合されたオプションを望んでいますが、ここにこれがあります(そしてそれが機能します):

CodeBlocksで、[設定] - >コンパイラとデバッガー - >その他の設定 - > [Advanced Options] - >コマンドラインマクロに移動します。

これらのmodをコマンドラインにします。彼らはすべて(もちろん)単一の行にいるべきですが、明確にするために、私はそれらを分離しました:

cmd /c DropTheBOM.exe $file
& $compiler $options $includes -c $file -o $object // (use your compiler cmdline)
& MakeTheBOM.exe $file
// Write your own utils, or try here: http://code.google.com/p/utf-bom-utils/

PS:#includeファイルはBOMをストリップしていません(それらがある場合)..これらのファイルがこの問題を非常に簡単に解決する#includyを含むルーチンの単純なbom y/n argスイッチは... Windowsの問題...それがなぜそれがケータリングされていないのか...またはそれを持っているのか?

他のヒント

とにかく、すべての文字列リテラルを別のファイルに外部化し、 loadLit() 実行時にそれらを取得する機能(または同様)。

これにより、1つのファイル(BOMを含む)を含むことができます すべて あなたの文字列の文字通り、そしてあなたがあなたのアプリケーションを国際化する必要があるならば、あなたの人生をずっと楽にします。

私たちはそれを私たちのもので行いますが、クラス1のプログラムを21の異なるロケールでI18N'edする必要があることに留意してください。そのため、この方法で多くの作業を節約します:-)あなたの走行距離は異なる場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top