在Eclipse下运行make for C ++项目

时间:2011-02-05 16:04:51

标签: c++ eclipse makefile eclipse-cdt

我正在使用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项目中。

我在这里缺少什么想法? 在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

当你执行项目的构建时,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

答案 1 :(得分:1)

好的,我现在发现了问题 - Eclipse将makefile放入另一个目录,而不是所有源代码文件所在的“src”文件夹。因此make没有找到编译所需的.cpp和.h文件。现在我最终得到了这样的东西:

...
forward.o : ../src/forward.cpp ../src/forward.h
...

有没有办法告诉make,即使没有明确说明,它也应该查看文件夹../src?

答案 2 :(得分:0)

您可以告诉make使用-C选项更改目录。

例如,如果您的源位于src /并且您的makefile位于src /的父目录中,您只需执行以下操作:

make -C ..

注意 - 从未特别使用Eclipse,但通常有一种方法可以添加命令行开关和放大器。 IDE选项中某处的构建命令的选项。

(根据你问题的第二部分回答,你指定问题是makefile与你的源文件位于不同的文件夹中。)