我在Ubuntu中创建了简单的C++Makefile Eclipse项目。Eclipse已创建默认Makefile:
PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
OBJS = cpp_makefile.o
ifeq ($(BUILD_MODE),debug)
CFLAGS += -g
else ifeq ($(BUILD_MODE),run)
CFLAGS += -O2
else ifeq ($(BUILD_MODE),linuxtools)
CFLAGS += -g -pg -fprofile-arcs -ftest-coverage
LDFLAGS += -pg -fprofile-arcs -ftest-coverage
else
$(error Build mode $(BUILD_MODE) not supported by this Makefile)
endif
all: cpp_makefile
cpp_makefile: $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $^
%.o: $(PROJECT_ROOT)%.cpp
$(CXX) -c $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -o $@ $<
%.o: $(PROJECT_ROOT)%.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
clean:
rm -fr cpp_makefile $(OBJS)
如果我只有一个源文件,一切都很顺利。如果我用它的头和cpp文件创建类
错误:
Building in: /home/a/cpp-workspace2/cpp_makefile/build/default
make -f ../../Makefile
g++ -c -O2 -o cpp_makefile.o /home/a/cpp-workspace2/cpp_makefile/cpp_makefile.cpp
g++ -o cpp_makefile cpp_makefile.o
/usr/bin/ld: cpp_makefile.o: in function `main':
cpp_makefile.cpp:(.text.startup+0x1c): undefined reference to `TestMe::TestMe()'
collect2: error: ld returned 1 exit status
make: *** [../../Makefile:19: cpp_makefile] Error 1
Build complete (3 errors, 0 warnings): /home/a/cpp-workspace2/cpp_makefile/build/default
如果我在EclipseC++托管构建项目中使用相同的源代码,一切都很顺利。如何在Eclipse Makefile项目中正确地解决这个问题?
cpp_makefile.cpp
#include "TestMe.h"
int main(int argc, char **argv)
{
TestMe testMe = TestMe();
return 0;
}
testme.h:
class TestMe {
public:
TestMe();
virtual ~TestMe(){};
};
testme.cpp:
#include "TestMe.h"
TestMe::TestMe() {
}
Eclipse将为您创建一个默认的 那么,对于基于Makefile的项目,您需要在向项目添加源时对Makefile进行适当的更改。在这种特殊情况下,看起来您应该改变 至OBJS = cpp_makefile.o
OBJS = cpp_makefile.o TestMe.o