我正在使用g和automake在Ubuntu 10.10下开发一个C应用程序.对于这个程序,我有两个cpp文件(main.cpp和forward.cpp,后者是测试类)和forward.h;我还有以下makefile:
main: \
forward.o
g++ -fPIC -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ -L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt \
-o simple_controller \
main.cpp \
forward.o
%.o : %.cpp
g++ -c -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ $< -o $@
clean:
rm -fv *.o
rm -fv */*.o
当我将所有这四个文件复制到同一目录并从命令行(bash)调用“make”时,将调用g并正确编译我的程序.
好的,现在我想在Eclipse下实现同样的目标.所以我在Eclipse下创建了一个新的非托管C项目,这样我就可以提供自己的makefile(与上面列出的相同).不幸的是,当我现在使用Eclipse下的“Build all”选项时,我可以看到以下控制台输出:
make
make: *** No rule to make target `forward.o', needed by `main'. Stop.
由于我是Linux下的C开发新手,使用g和makefile,我真的不明白这个问题.我认为正确编译我的应用程序所需的一切都是在makefile中编写的,因为它在命令行中运行良好.但似乎我无法将相同的makefile 1:1复制到我的Eclipse项目中.
我在这里缺少什么想法?
在此先感谢您的帮助!
最佳答案 当您执行项目构建时,eclipse正在执行make all命令,因此您需要修改项目以使用main而不是所有目标eclipse使用,或者将所有规则添加到引用备份的makefile中主要规则.另外,我会在clean步骤下添加一个命令来删除可执行文件.
修改后的Makefile:
main: \
forward.o
g++ -fPIC -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ - L/usr/local/Aria/lib -lAria -lpthread -ldl -lrt \
-o simple_controller \
main.cpp \
forward.o
%.o : %.cpp
g++ -c -g -Wall -D_REENTRANT -fno-exceptions -I/usr/local/Aria/include/ $< -o $@
clean:
rm -fv *.o
rm -fv */*.o
rm -fv simple_controller
all: main