通过makefile编译 - 没有生成可执行文件?

时间:2014-06-18 01:02:08

标签: c++ makefile

我为我的C ++程序编写了一个makefile,如下所示:

all: item

item: main.o item.o
    g++ -o item main.o item.o

main.o: main.cpp item.h
    g++ -c main.cpp

item.o: item.cpp item.h
    g++ -c item.cpp

clean:
    rm -rf *.o
    rm -rf item

在终端输入'make'给了我以下内容:

storm:24% make
g++ -c main.cpp
g++ -c item.cpp
g++ -o item main.o item.o

然而,输入'./a.out'后,终端输出:

storm:25% ./a.out ./a.out: Command not found.

我很难过。我尝试在makefile中的'all'目标之后加上'a.out'和'./a.out',但是我收到了同样的错误。为什么要编译,但不生成可执行文件?如果这有帮助的话,我是通过远程访问(通过PuTTY)到在Linux上运行的服务器来实现的。

感谢。

3 个答案:

答案 0 :(得分:3)

  

然而,在输入' ./ a.out'后,终端输出:...

为什么期望有./a.out?这是链接器的默认输出,除非使用-o选项另行指定,就像在makefile构建可执行程序时使用-o item所做的那样:

item: main.o item.o
    g++ -o item main.o item.o
#       ^^^^^^^ !!!

只需致电./item即可运行生成的程序,而不是./a.out

答案 1 :(得分:1)

当您执行链接时,指定输出到item(带-o item)因此,结果应该位于名为item的文件中,而不是a.out

答案 2 :(得分:0)

在你的makefile中

g++ -o item main.o item.o

选项-o表示您的目标文件是项目。 所以我建议你这样做:

./item