我正在尝试创建一个makefile来在linux上构建一个windows c ++项目。我必须在不同的目录中编译.cpp,以创建一个包含对象的库.so。 为此,我创建了一个脚本来查找.cpp并将其放在一个文件中:
SOURCE= \
./Source/CHAINE.CPP\
./Source/CRACKCHN.CPP\
./Source/LISTEPTR.CPP\
现在我的makefile看起来像:(我知道我将不得不更改$(TARGET):$(OBJECT)规则,但这不是我的问题,我认为)
-include sources.mk
OBJECT = $(SOURCE:%.CPP=%.o)
#
$(TARGET) : $(OBJECT)
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
$(OBJECT) : $(SOURCE)
$(CC) $(CFLAG) $(PREPROC) -c $< -o $(OBJ_DIR)/$@ $(INCLUDE)
但是当我执行make命令时,所有对象都是使用第一个.CPP创建的(此处是CHAINE.CPP):
g++ -Wall -D _MSC_VER -D _GPP -c Source/CHAINE.CPP -o ./Source/CHAINE.o
===
g++ -Wall -D _MSC_VER -D _GPP -c Source/CHAINE.CPP -o ./Source/CRACKCHN.o
===
g++ -Wall -D _MSC_VER -D _GPP -c Source/CHAINE.CPP -o ./Source/LISTEPTR.o
这是我第一次创建makefile,如果有人有解决方案,我有很多问题需要解决吗?
答案 0 :(得分:2)
$(OBJECT)是所有对象的列表。使用最后一条规则,您似乎想要告诉Make如何从单个.cpp构建单个.o。它应该有一个for:
%.o: %.cpp
$(CC) $(CFLAG) $(PREPROC) -c $< -o $(OBJ_DIR)/$@ $(INCLUDE)