私が書いたカスタムクラスのさまざまなコンストラクターを持つ大規模なプロジェクトがあります。クラスごとに、クラス定義とコンストラクターを含むヘッダー ファイルが存在します。さらに、クラスごとに、そのクラスのメンバー関数の定義を含む .cpp ファイルが存在します。
make を呼び出すと、すべてが .o ファイルに正常にコンパイルされます。ただし、リンカーは、各コンストラクターのシンボルが重複していると不平を言っています。
コンストラクターの定義を .cpp ファイルに移動しようとしましたが、問題は解決しませんでした。
私のメイクファイルは次のとおりです
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
PRJ_SRC_DIR=./source
GENHEADER_DIR=/usr/local/include/genheaders
PRJ_SOURCES= #long list of .cpp files
GENERAL_SOURCES= #long list of .cpp files
SOURCES=$(PRJ_SOURCES:%=$(PRJ_SRC_DIR)/%) $(GENERAL_SOURCES:%=$(GENHEADER_DIR)/%)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=networkMole.out
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE):$(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
すべてのコンストラクターは、クラスの本体内で宣言され、クラスの最後で定義されます。
/* class1.hpp */
classOne{
/* Some Code */
ClassOne();
};
ClassOne::ClassOne(){ /*Code*/}