1

GCCでは、次のように単純なプリプロセッサを実行できます。

g++ -E x.cpp > temp.cpp

ただし、非常に多くmakefileのプロジェクトが実施されている大規模なプロジェクトでは、すべての依存関係について言及するのは非常に面倒です。例えば

g++ -I /home/x1 -I /home/x2 ... -DMACRO1 -DMACRO2 ... -E x.cpp > temp.cpp

を使用しmakefileてCプリプロセッサを実行する方法はありますか?

4

2 に答える 2

1

前処理されたファイルにサフィックスを使用すると、C ++ファイル.cppのサフィックスと衝突するため、お勧めできません。.cpp他のことを試してください-接尾辞を使用して開始できるスニペットを次に示します.e

CXX      = g++
CPPFLAGS = -E
CXXFLAGS = -Wall -DMACRO1 -DMACRO2
INCLUDES = -I /home/x1 -I /home/x2

%.e : %.c
        $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(INCLUDES) $< -o $@

'レシピ'の先頭( "$(CXX)$(CFLAGS)..."の行)にTABを配置するように注意してください。上記のものは、ファイルからファイルmakeを構築する方法を指示するルールを定義します。あなたが使用できるファイルで.e.cppx.cpp

make x.e

-EフラグがCPPFLAGSで定義されていることに注意してください。これは、コンパイラ(g ++)に前処理段階の後で停止するように指示します。は-o、生成されたファイルを配置する場所をコンパイラーに指示しますが、$ @は、この場合はファイルmakeの省略形です。何もリダイレクトする必要はありません。g++がファイルを書き込みます。target.e.e

cppファイルのリスト用のファイルを生成する場合は.e、次のようにします。

SRCS = a.cpp b.cpp c.cpp d.cpp
CPPS = $(SRCS:.cpp=.e)   

.PHONY:cpps
cpps: $(CPPS)   

次に、それらを構築します。

make cpps
于 2012-05-21T01:53:04.490 に答える
1

-save-temps を使用できませんか? プロジェクトに多くのメイクファイルがある場合、コンパイラへの名前/パスを定義するトップレベルのものがあるのではないでしょうか? それをハイジャックして、次のようにします。

CC = some-target-gcc -save-temps

そうすると、ビルドするたびに .i ファイルが山積みになってしまいます。

于 2013-04-19T15:44:49.380 に答える