1

.cpp と .cc をサポートするようにメイクファイルを変更しようとしていますが、次のようなエラーが発生し続けます。

target `source/systemFuncs.cpp' doesn't match the target pattern

.cc をサポートする既存の makefile を変更していて、.cpp もコンパイルできるようにしたいのですが、方法がわかりません。これはもともと、nacl プロジェクトのメイク ファイルでした。

.cpp と .cc の両方をコンパイルするにはどうすればよいですか?

メイクファイルに関連するコンテンツ:

x86_32_OBJS:=$(patsubst %.cc,%_32.o,$(CXX_SOURCES))
$(x86_32_OBJS) : %_32.o : %.cc $(THIS_MAKE)
    $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS)
    $(CXX) -o $@ $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)

CXX_SOURCES には .cc ファイルと .cpp ファイルの両方が含まれているため、両方をコンパイルできる必要があります。

4

2 に答える 2

2

あなたは私たちに続けるために多くを与えていませんが、私は推測します。source/systemFuncs.cppに追加したと思いますCXX_SOURCES。次に、この行をヒットします。

x86_32_OBJS:=$(patsubst %.cc,%_32.o,$(CXX_SOURCES))

これは「.cc」を「_32.o」に置き換え、そのままにしsource/systemFuncs.cppました。次に、Makeは、この名前を「_32.o」を予期するルールにフィードしようとしましたが、クラッシュしました。

これを試して:

CPP_SOURCES += source/systemFuncs.cpp

x86_32_CPP_OBJS:=$(patsubst %.cpp,%_32.o,$(CPP_SOURCES))

$(x86_32_CPP_OBJS) : %_32.o : %.cpp $(THIS_MAKE)
    $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

運が良ければ、これは大雑把ですが効果的です。さらなる改善は後で可能になるでしょう。

編集:
ファイル名の両方のセットが1つの変数(CXX_SOURCES)に含まれている必要がある場合は、次のようにそれらを区切ることができます。

CC_SOURCES :=  $(filter %.cc, $(CXX_SOURCES))
CPP_SOURCES := $(filter %.cpp, $(CXX_SOURCES))

それで十分ですか?

于 2012-03-20T05:01:44.043 に答える
0

別の、しかし(実行のために)同一のルールを作成できます。

(上記のコードでは空なのでスキップTHIS_MAKEしましたが、追加できます)

# catch both
x86_32_OBJS:=$(addsuffix _32.o,$(basename $(CXX_SOURCES)))

# rule for .cc
$(patsubst %.cc,%_32.o,$(filter %.cc,$(CXX_SOURCES))):%_32.o: %.cc
     $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

# rule for .cpp
$(patsubst %.cpp,%_32.o,$(filter %.cpp,$(CXX_SOURCES))):%_32.o: %.cpp
    $(CXX) ${INCDIRS} -o $@ -c $< -m32 -O0 -g $(CXXFLAGS)

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS)
    $(CXX) -o $@ $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)
于 2012-03-20T08:48:33.080 に答える