0

したがって、私のタスクは簡単です。メイクファイル (メイクファイルを使用した新規) を作成しました。別のフォルダーに .o ファイルを保持して、よりクリーンなディレクトリを作成し、他のユーザーが .o ファイルを使用できるようにしたいと考えています。

-o $< $@ の使用を指す多くの解決策を検索して見つけました

しかし、それは私にそれを与えていますg++: cannot specify -o with -c or -S with multiple files

これは私がやりたいことです:

$(OBJECT_PATH)/file1.o: $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp
        $(CC) $(CFLAGS) $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp -o $@

file1.cpp には #include "file1.h" があるため、読んだ内容から、依存関係に file1.cpp を含める必要があります。ただし、別のディレクトリにエクスポートすることはできません。

解決策はありますか?それとも概念が間違っていますか?

4

2 に答える 2

1

どのコマンドが呼び出されるかを理解するために、make -dまたはさらに良いリメイク を使用してください。-x

make -p また、どの組み込みルールが使用されているかを理解するために実行します。

あなたが再定義したかどうかわからないので、私たちはあなたをこれ以上助けることはできませんCFLAGS

そして、C ++のコンパイルは、それと、たとえば(出力からこれを抽出しています)を使用しg++CXX行う方CXXFLAGSがよいでしょう。make -p

LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
CXX = g++
%.o: %.cc
      $(COMPILE.cc) $(OUTPUT_OPTION) $<

CXXFLAGS= -Wall -g少なくとも開発段階では持っておくことを強くお勧めします。gdbとの使い方も学びましょうvalgrind

あなたはあなたの中に次のものを持つことができますMakefile

 CXXFLAGS= -g -Wall
 SOURCES=f1.cc f2.cc
 SOURCE_PATH=yoursourcedir/
 OBJECT_PATH=yourobjectdir/
 SRCFILES=$(patsubst %.cc,$(SOURCE_PATH)/%.cc,$(SOURCES))
 OBJFILES=$(patsubst %.cc,$(OBJECT_PATH)/%.o,$(SOURCES))
 PROGFILE=$(OBJECT_PATH)
 .PHONY: all clean
 all: $(PROGFILE)
 $(PROGFILE): $(OBJFILES)
         $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@
 $(OBJECT_PATH)/%.o: $(SOURCE_PATH)/%.cc
         $(COMPILE.cc)  $(OUTPUT_OPTION) $<
 clean:
         $(RM) $(OBJECT_PATH)/*.o $(PROGFILE)
于 2012-11-01T10:55:44.317 に答える
1

試す

$(OBJECT_PATH)/file1.o: $(SOURCE_PATH)/file2.cpp $(SOURCE_PATH)/file1.cpp
    $(CC) $(CFLAGS) $^ -c $@

CFLAGS に -o -c または -s フラグが含まれていないことを確認します

暗黙のルールについても読んでください。メイクファイルを整理するのに役立つかもしれません

于 2012-11-01T10:57:07.173 に答える