linux插入模式命令行模式,底行模式,gcc和makefile指令

来源:互联网 发布:hadoop 数据挖掘 编辑:程序博客网 时间:2024/06/05 14:51

GCC:

1.
gcc  hello.c  -o hello  
这是一步编译成hello这个可执行文件,其实有四个过程:预处理,编译,汇编,链接四个过程,最后才成可执行的文件;
 
常见的文件后缀:
.c   c文件
.h   .h文件
 .i   预处理过的c文件
.o  编译后的目标文件
.s  汇编语言文件
 
#inclde< .h>    包含的.h头文件在标准库中; 
 #include " .h"  包含的.h 头文件在当前目录中;当前找不到会到标准库中去寻找
 
2. 预处理
#gcc -E  hello.c  -o hello.i    
把#include <stdio.h>所包含的文件全部拉到了hello.i中;
 
 
3. 编译
#gcc  -S hello.i  -o hello.s ,生成了.s 汇编文件
 
4.  汇编 
#gcc -c  hello.s  -o hello.o
对汇编文件进行汇编处理,生成目标.o文件
 
5. 链接 
#gcc  hello.o -o hello   ;把hello.o目标文件和需要用到的库进行链接,生产一个可执行的文件hello
 
 
6. 生成可调式的代码-g
#gcc  -g hello.c  -o hello1; hello1是可以对运行过程进行调试l
7. -Wall  包含告警信息
#gcc -Wall hello.c -o hello ; 编译过程把告警信息打印出来
 
8. -w  不包含告警信息
#gcc -w  hello.c  -o hello  
 
9. -I  ./w1  寻找当前w1文件夹下的头文件
hello.c
#include "hello.h"
int main()
{
    printf("hello\n");
    return 0;
}
 
hello.h 在./w1下 
#include <stdio.h>
 
编译时:
#gcc -I ./w1  hello.c  -o hello
自动到w1中寻找hello.h



Makefile:

1. 
 目标:依赖文件
<tab> 可执行命令
2.
 
例1:
hello: hello.c
   gcc hello.c -o hello
.PHONY:clean
clean:
   rm -rf  hello
 

 
例2:Makefile
hello: main.o  func1.o func2.o   func3.o
   gcc main.o func1.o func2.o  -o  hello
main.o:main.c
   gcc  -c  main.c 
func1.o:func1.c
   gcc -c func1.c
func2.o: func2.c
   gcc -c fun2.c
func3.o:func3.c
   gcc -c func3.c
clean:
   rm -rf main.o func1.o func2.o    func3.o
 
makefile1
#make -f makefile1
 
 
Makfile 可以修改如下:
obj=main.o func1.o func2.o func3.o
hello:$(obj)
   gcc $(obj) -o hello
.......
4. 变量
$^:代表所有的依赖文件
$@: 代表目标
$<: 第一个依赖文件
 
例:
hello:main.o  func1.o  func2.o
   gcc  $^  -o  $@
 
4. $(MAKE) -C subdir  改变makefile的路径的
top dir(根目录)下有源文件main.c、makefile(主)、文件夹sub1、文件夹sub2;子目录sub1里有源 
         文件sub1.c和makefile(次1);子目录sub2里有源文件sub2.c和makefile(次2)。
             main.c里有主函数,需要调用sub1.c里的和sub2.c。
         要求通过根目录下的makefile嵌套调用子目录下的makefile来编译,最后链接生成可执行文件edit。
         makefile的编写
    首先是子目录sub1下的makefile: 
    sub1.o : sub1.c
           gcc-c sub1.c
          接下来是子目录sub2下的makefile:
          sub2.o : sub2.c
       gcc -csub2.c
         一条正常的编译命令,最后是根目录下的makefile:
 
        VPATH=./sub1 ./sub2
        obj=main.o sub1.o sub2.o
       edit : $(obj)
       gcc -o edit main.o ./sub1/sub1.o ./sub2/sub2.o
       main.o : main.c
       gcc -cmain.c
        sub1.o : sub1.c
       $(MAKE) -C ./sub1
        sub2.o : sub2.c
       $(MAKE) -C./sub2
      .PHONY : clean
       clean :
       rm editmain.o -fr
       rm./sub1/*.o -fr
       rm./sub2/*.o -fr
 

附:根目录main函数下的makefile的内容
 

 

阅读全文
0 0
原创粉丝点击