Linux システムで中規模のプロジェクトをコンパイルするには、Makefile の問題があります。私の考えは、Makefile をできるだけシンプルに保ち、Makefile にすべての作業を任せることです。いくつかのソース コード (source/src 内) だけでなく、各ライブラリをテストするためのテスト ファイル (source/test 内) もいくつかあります。Makefile は次のとおりです。
DHOME = ${HOME}/Project
DSRC = ${DHOME}/source/src
DINCLUDE = ${DHOME}/source/include
BIN = ${DHOME}/target/bin
DirObj = ${DHOME}/target/obj
DirLib = ${DHOME}/target/lib
INCLUDES = -I${DINCLUDE}
DLIB = ${DHOME}/target/lib
LIBS = -L${DLIB} -lm ${DLIB}/dclass.a
CXX = g++ -g ${INCLUDES} -L${DLIB}
MAKE = ${CXX} -O -Wall -fPIC -c
TESTS = test_FCity test_FPlane
o_base = DPara.o DString.o FCommand.o FInput.o
${o_base}: %.o: $(DSRC)/%.cc
$(MAKE) $(CFLAGS) $< -o ${DirObj}/$@
dclass: $(o_base)
ar -rs ${DirLib}/dclass.a ${DirObj}/*.o
TEST_SOURCE = $(wildcard test/test_*.cc)
test: ${o_base} dclass
${CXX} ${TEST_SOURCE} -o ${BIN}/$@ ${LIBS}
main: $(SOURCES) $(EXECUTABLE)
${CXX} /src/main.c -o ${BIN}/main ${LIBS}
私がやりたいことはmake main
、メイン コード ( main.cc
) [上記の Makefile でテストされていない] をmake test
コンパイルしてリンクし、ディレクトリ内の各ファイルを自動的にコンパイルしてリンクするsource/test
(そしてそれらを に入れるtarget/bin
) ことです。さて、この Makefile を実行すると、各ライブラリがコンパイルされるように見えますが、次のエラーが発生します。
multiple definition of `main'
すべてmain()
関数を持ついくつかのテスト スクリプトをコンパイルしようとしているので、不思議ではありません。この問題を解決する方法と、上記の Makefile を改善する方法はありますか? そして、o_base
行で指定されたファイルの量を減らす方法についてのアイデアはありますか?
ありがとうアレックス