1

私は次の考えを持っています:すべてのソースファイルはSRCディレクトリにあり、すべてのオブジェクトファイルはOBJディレクトリにあります。GNU makefileで、すべてのソースファイルを自動的に検索し、ソースファイルオブジェクトのリストとo-ファイルオブジェクトのリストを作成したいと思います。私は次の2つの構文を試しましたが、すべて

ターゲット`/home/Serial/obj/Serial.o'を作成するルールはありません。

ここにアイデアがあります:

c_files = $(wildcard $(SRC)/*.cpp)
o_files = $(patsub %.c,%.o,$(c_files) )


c_files = $(wildcard $(SRC)/*.cpp)
o_files = $(patsub $(SRC)/%.c,$(OBJ)/%.o,$(c_files) )

変数はc_files正しく入力されているようですが、オブジェクトリストを作成できません。ドキュメントによると、2番目のアイデアは機能するはずですが、機能しません。replaceステートメントの何が問題になっていますか。

明確にするために:私は例えば持っていることを期待しています

c_files = src/file1.cc src/file2.cc src/file109.cc

そこから次のリストを作成したい

o_files = obj/file1.o obj/files.o obj/file109.o
4

1 に答える 1

1

より簡単な方法があります:

o_files = $(c_files:.cpp=.o)

そして、オブジェクトファイルを自動的にコンパイルするパターンを取得するには:

obj/%.o: src/%.cpp
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $^ -o $@

組み合わせる:

c_files = $(wildcard $(SRC)/*.cpp)
o_files = $(c_files:.cpp=.o)

all: $(PROG)

$(OBJ)/%.o: $(SRC)/%.cpp
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $^ -o $@

$(PROG): $(o_files)
    $(LD) $(LDFLAGS) $^ -o $@
于 2012-09-28T06:01:12.100 に答える