我修改了gcc/g++ 选项,将所有对象文件放到我的场景的单独目录中。但是,运行时返回错误make link
。
项目树
|--- bin
| |--- main
|--- obj
| |--- object1.o
| |--- object2.o
| |--- ...
|--- src
| |--- source1.cpp
| |--- source2.cpp
| |--- ...
|--- main.cpp
生成文件
SRCDIR = ./src
OBJDIR = ./obj
BINDIR = ./bin
INCDIR = ./src
CC = g++
EXEC = main
SRC = $(wildcard $(SRCDIR)/*.cpp main.cpp)
OBJ = $(addprefix $(OBJDIR)/,$(notdir $(SRC:.cpp=.o)))
compile: $(OBJ)
$(OBJ): $(SRC)
$(CC) -c $< -o $@
link:
$(CC) -o $(EXEC) $(OBJ)
clean:
find -type f -name "$(EXEC)" -delete
find -type f -name "*.o" -delete
find -type f -name "*~" -delete
例如。:
主文件
#include <iostream>
#include "Source.h"
using namespace std;
int main(int argc, char* argv[]) {
Source::hello();
return 0;
}
源.h
#include "Source.h"
#ifndef SOURCE_H
#define SOURCE_H
#include <iostream>
using namespace std;
class Source {
public:
static void hello();
};
#endif
源.cpp
#include "Source.h"
void Source::hello() {
cout << "Hello Makefile" << endl;
}
make compile
好的!创建所有对象 (obj/*.o)
问题:make link
错误:
g++ -o main ./obj/Source.o ./obj/main.o
./obj/main.o: In function `Source::hello()':
Source.cpp:(.text+0x0): multiple definition of `Source::hello()'
我知道问题
g++ -c src/Source.cpp -o obj/Source.o
g++ -c src/Source.cpp -o obj/main.o.
我不知道如何解决。知道有什么问题吗?