我在 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
行中给出的文件数量的想法?
谢谢亚历克斯