+ -
当前位置:首页 → 问答吧 → makefile 中产生的.o文件生成步骤 去掉貌似无关紧要吧

makefile 中产生的.o文件生成步骤 去掉貌似无关紧要吧

时间:2011-07-26

来源:互联网

C/C++ code

all :hello
hello:hello.c
        gcc -lpthread -o hello hello.c
clean:
        rm hello.c
                                                                                


像这样直接 从.c生成 可执行文件就行了么。为什么。。百度出来的makefile 编写规范都要先编译成hello.o文件,
再从hello.o文件生成 hello。。
还有结尾那个clean 貌似要不要看不出什么区别。。。
这两种规范 有什么深意,,求解

作者: playlinux   发布时间: 2011-07-26

编译生成.o文件,方便你下次的编译
你下次编译过程中,如果发现之前没修改过的源文件,它就不会重新编译一次
而直接用.c文件生成应用程序或库,每次你修改后要重新编译的时候,就会把时间花费在上面
结尾的clean可以不要,你也可以改名字
譬如你改成
shit:
  rm hello.c
你在shell输入
make shit
也是一样的原理
其实那个可以认为是函数(宏)的进口
而make后面的参数就是调用哪个函数(宏)

作者: ganjianh8   发布时间: 2011-07-26

clean:
  rm hello.c

你确定是这样?应该是
clean:
  rm hello.o
吧?

作者: abcdef0966   发布时间: 2011-07-26

引用 2 楼 abcdef0966 的回复:
clean:
rm hello.c

你确定是这样?应该是
clean:
rm hello.o
吧?

这个makefile文件里没有生成 hello.o文件 。这段也就没用了吧。。

作者: playlinux   发布时间: 2011-07-26

方便以后编译, 如果没修改就不用再编译了, 而且有需要的时候可以作为库link到别的程序上

作者: JackieWell   发布时间: 2011-07-26

引用 1 楼 ganjianh8 的回复:
编译生成.o文件,方便你下次的编译
你下次编译过程中,如果发现之前没修改过的源文件,它就不会重新编译一次
而直接用.c文件生成应用程序或库,每次你修改后要重新编译的时候,就会把时间花费在上面
结尾的clean可以不要,你也可以改名字
譬如你改成
shit:
rm hello.c
你在shell输入
make shit
也是一样的原理
其实那个可以认为是函数(宏)的进口
而……

那个clean,,明白了。。
关于.o的话, 用.c直接编译的话。。如果源代码没有更改,也不会再编译了呀、、

作者: playlinux   发布时间: 2011-07-26

引用 4 楼 jackiewell 的回复:
方便以后编译, 如果没修改就不用再编译了, 而且有需要的时候可以作为库link到别的程序上

makefile里 用.c 直接生成目标文件。
下次编译的时候使用make
代码没有更改,也不会再编译!

作者: playlinux   发布时间: 2011-07-26

即使不写出来,只要编译了,.o文件也是会产生的
写出来更明朗些

作者: thefirstz   发布时间: 2011-07-26

引用 7 楼 thefirstz 的回复:
即使不写出来,只要编译了,.o文件也是会产生的
写出来更明朗些

......刚测试了,没有生成.o文件。。

作者: playlinux   发布时间: 2011-07-26