私はperlスクリプトを持っています。私はgppがそれらを普通に処理する前に、基本的に余分な前処理ステップとして、私のcpp/hファイルをフィルタリングしたいと思います。これを行う簡単な方法はありますか?私はスクリプトにcppファイルを供給してgccにstdinからの出力を読み込ませることができることに気づいていますが、これはヘッダファイルには役立ちません。C++をperlスクリプトでフィルタリングしますか?
答えて
このようなプロセスを処理する古典的な方法は、ソースコード(Perlフィルタへの入力)を新しいファイルサフィックスで新しい言語として扱うことです。次にmake
に、この新しいファイルタイプからC++ソースファイルをコンパイルする方法がPerlスクリプトであると伝えます。例えば
:
- 新しいサフィックス:(
.cc
サフィックスを想定).ccp
新ルール:
.ccp.cc: ${FILTERSCRIPT} $<
サフィックスリストに新しいサフィックスを追加 - よりも優先して通常のC++ルール
最後の点が最も難しいです。 .ccp
という接尾辞を追加するだけでは、ファイルが存在する場合、make
は.ccp
ファイルの変更に実際には気を付けません。中間の.cc
ファイルを削除するか、接尾辞リストの.cc
の前に.ccp
が表示されていることを確認する必要があります。 (注: '.ccp.cc
'ルールなしで '.ccp.o
'ルールを作成し、 '.cc
'中間がクリーンアップされていないことを確認しないと、コンパイルに失敗した後に再構築すると、make
は '.cc
'ファイルがあります。
サフィックスの変更がオプションでない場合は、フィルタリングを実行するコンパイルスクリプトを作成し、C++コンパイラを直接呼び出します。
CおよびC++プリプロセッサは、この種のものをサポートしていません。これを処理する唯一の方法は、コンパイラを呼び出す前に、makefile(または何でも)がperlスクリプトを通してすべてのファイルを処理することです。これは明らかに非常に困難であり、このようなステップを必要とするアーキテクチャを設計していない非常に良い理由の1つです。あなたはそのような施設が必要だと思うのですか?おそらくあなたが気付いていないより良い解決策があります。
Perlスクリプトを実行してgccを呼び出すgccのラッパーはどうですか? plgccのようなものを呼び出し、makefileにと設定します。あなたのスクリプトはインクルードディレクティブを処理するのに十分スマートでなければなりません - あなたのスクリプトがインクルードするインクルードするプリプロセッサだけを呼び出すのでなければ、そのことを行い、gccを呼び出します。
GCCでは、独自のプリプロセッサを使用できます。スクリプトをプリプロセッサとして設定し、cpp(通常のgccプリプロセッサ)を使って出力を実行することができます。 -Bと-no-integrated-cppコマンドラインオプションのgccマニュアルを見てください。
警告 - 私は自分自身を試したことがないので、どのように面倒かも知れません(C++を含む多くの言語がacコンパイラのプリプロセッサとして実装されていましたが、あまりにも悪い)。
C++は、もともとプリプロセッサとして実装されていません。オブジェクトコードやアセンブリ言語ではなくCを発行するコンパイラとして実装されていました。 –
GCC固有のオプションを使用すると、もちろん他のコンパイラによってコードが消費されることはありません。 – JesperE
私はこれまでのように、以下のようなことをして、このようなケースを処理しました。このアプローチでは、未処理のソースコードをある種の命名体系(この場合はベース名の後に_pp
という接尾辞)で区別できると仮定しています。
# These are your source files to be preprocessed
SRC_RAW = mysrc_pp.cpp
# These are the source files after preprocessing
SRC_PP = $(patsubst %_pp.cpp, %.cpp, $(SRC_RAW))
ALL_SRC = $(SRC) main.cpp other.cpp
OBJ = $(patsubst %.cpp, %.o, $(ALL_SRC))
$(SRC): %.cpp: %_pp.cpp
$(PERL) $< > [email protected]
$(OBJ): %.o: %.cpp
$(CXX) ...
ただし、前処理が必要なヘッダーファイルがある場合は処理されません。その場合、それらを作成するために同様のルールが必要です。
私はヘッダーファイルのものがここでの主な問題だと思います –
- 1. perlスクリプト内でperlスクリプトを実行したい
- 2. perlスクリプトからperlスクリプトを呼び出す
- 3. PHP/Perlスクリプトによる特定のApacheリクエストのフィルタリング
- 4. perlでハッシュのハッシュをフィルタリングする
- 5. Perlスクリプトは、コマンドプロンプトでOK動作しますが、CGIスクリプト
- 6. 別のperlスクリプトの途中からシステムコールを使ってperlスクリプトから値を取得できますか?
- 7. Perl CGIスクリプトからブラウザにXMLを出力しますか?
- 8. はperlのスクリプトで
- 9. perlスクリプトでbashインスタンスを作成できますか?
- 10. システムコールなしでPerlスクリプトの中からffmpegを使用できますか?
- 11. perlスクリプトのWindowsシンボリックリンクを削除しますか?
- 12. Perlスクリプトがmysqlコマンドを実行していますか?
- 13. linuxのファイルからPerlスクリプトを実行しています
- 14. あるPerlスクリプトから別のPerlスクリプトに引数を渡すにはどうすればよいですか?
- 15. PHPスクリプトを変更してPerlスクリプトとして実行する
- 16. Perlスクリプトhogging CPU
- 17. DDOS perlスクリプト
- 18. ssh in perlスクリプト
- 19. SetuidからPerlへのスクリプト
- 20. Makeからperlスクリプトを呼び出す
- 21. JavaScriptからPerlスクリプトを呼び出す
- 22. Perlスクリプトがcrontabで動作しない
- 23. perlスクリプトを使用してadbサーバーを終了します
- 24. なぜPerlスクリプトがFastCGIで起動しないのですか?
- 25. C++でデバッグイベントをフィルタリングする
- 26. C#でコレクションをフィルタリングする
- 27. ストリームをCでフィルタリングする#
- 28. bashスクリプトのPerlハッシュに相当しますか?
- 29. PerlスクリプトでASPXページにログイン
- 30. このperlスクリプトは何をしますか?外見は厄介です
私は同意します。私はあらゆる種類のソースコードの前処理を行うための複雑な規則を持つMakefileを管理してきましたが、それはあまり面白くありません。 – JesperE