带有一个.o文件和一个.CPP文件的c ++ makefile

时间:2014-09-25 07:58:58

标签: c++ linux makefile

我正在尝试创建一个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,如果有人有解决方案,我有很多问题需要解决吗?

1 个答案:

答案 0 :(得分:2)

$(OBJECT)是所有对象的列表。使用最后一条规则,您似乎想要告诉Make如何从单个.cpp构建单个.o。它应该有一个for:

%.o: %.cpp
    $(CC) $(CFLAG) $(PREPROC) -c $< -o $(OBJ_DIR)/$@ $(INCLUDE)