2014-09-25 82 views
1

我想创建一个makefile来在linux上构建一个windows C++项目。我必须在不同的目录下编译.cpp,以便用这些对象创建一个库.so。 对于我创建了一个脚本,找到的.cpp,并把它放在一个文件:Makefile为一个.o文件和一个.CPP文件的C++

SOURCE= \ 
./Source/CHAINE.CPP\ 
./Source/CRACKCHN.CPP\ 
./Source/LISTEPTR.CPP\ 

现在我生成文件看起来像:(我知道我将不得不改变$(TARGET):$(OBJECT )规则,但是那不是我这里的问题,我认为)

-include sources.mk 
OBJECT = $(SOURCE:%.CPP=%.o) 
# 
$(TARGET) : $(OBJECT) 
     $(CC) $(CFLAGS) -o [email protected] $^ $(LIBS) 

$(OBJECT) : $(SOURCE) 
     $(CC) $(CFLAG) $(PREPROC) -c $< -o $(OBJ_DIR)/[email protected] $(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

你想要一个'.cpp.o:'规则,而不是明确规定你想从一个源文件创建所有目标文件的规则。 – 2014-09-25 08:08:41

+0

请查看[CMake](http://www.cmake.org/)了解这些跨平台项目。 – yegorich 2014-09-25 15:12:52

回答

2

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

%.o: %.cpp 
    $(CC) $(CFLAG) $(PREPROC) -c $< -o $(OBJ_DIR)/[email protected] $(INCLUDE) 
+0

它的作品!非常感谢我一定会尝试它:) – johan 2014-09-25 08:29:49