我在我的src目录下生成文件。 生成文件应建立数据结构,这是在数据结构/,然后遍历所有cpp文件中的计算/并创建../bin/calculations相应的.so文件写makefile来构建动态库
我试过的语法如下:
DAST = DataStructures/
COMPS = computations/
BIN = ../bin/
OBJECTS = ${DAST}Atom.o ${DAST}Molecule.o
COMPILE = g++ -Wall -g -c -std=c++0x -I/usr/local/include/openbabel-2.0 LINK = g++ -Wall -g -std=c++0x ${OBJECTS} -lopenbabel -I/usr/local/include/openbabel-2.0
all: ${BIN}main ${DAST}Molecule.o ${DAST}Atom.o ${BIN}${COMPS}%.so
${BIN}main: ${OBJECTS} main.cpp
${LINK} main.cpp -o ${BIN}main
${DAST}Molecule.o: ${DAST}Molecule.h ${DAST}Molecule.cpp
${COMPILE} ${DAST}Molecule.cpp -o ${DAST}Molecule.o
${DAST}Atom.o: ${DAST}Atom.h ${DAST}Atom.cpp
${COMPILE} ${DAST}Atom.cpp -o ${DAST}Atom.o
${BIN}${COMPS}%.o: ${COMPS}%.cpp
gcc -Wall -fPIC -c -lopenbabel $< -I/usr/local/include/openbabel-2.0 -std=c++0x
${BIN}${COMPS}%.so: ${COMPS}%.o
gcc -shared -Wl,-soname,libcsmtest.so.1 -o libcsmtest.so [email protected]
clean:
rm -rf ${OBJECTS}
.PHONY: all clean
但它显然是行不通的,因为我得到下面的输出:
[email protected]:~/csm/csm2/src$ make all
make: *** No rule to make target `../bin/computations/%.so', needed by 'all'. Stop.
感谢
我不使用Make,所以这不是你的问题的答案。但是,我建议学习使用CMake或Bjam这样的跨平台构建者是非常值得的投资。它们通常在语法上更容易,更易于安装和维护,并且可以在Linux和Windows的世界中工作。 – Tom 2011-04-06 12:01:41