newb:我的makefile出了什么问题?

时间:2014-10-09 00:34:58

标签: c makefile

我有一个最后提供的makefile,以及一些关于它的问题:

  1. clean:部分做了什么?
  2. -c部分是什么意思? (谷歌搜索gcc -c explained和其他变体给了我一个大学的首字母缩略词GCC。)
  3. 当我尝试运行make时,我收到此错误,但文件lab3p2.c肯定存在。怎么了?

    gcc –c lab3p2.c
    gcc: –c: No such file or directory
    make: *** [lab3p2.o] Error 1 
    
  4. 生成文件

    all: lab3p2
    
    lab3p2: lab3p2.o lab3p2f1.o lab3p2f2.o lab3p2f3.o
        gcc lab3p2.o lab3p2f1.o lab3p2f2.o lab3p2f3.o –o lab3p2
    
    lab3p2.o: lab3p2.c
        gcc –c lab3p2.c
    
    lab3p2f1.o: lab3p2f1.c
        gcc –c lab3p2f1.c
    
    lab3p2f2.o: lab3p2f2.c
        gcc –c lab3p2f2.c
    
    lab3p2f3.o: lab3p2f3.c
        gcc –c lab3p2f3.c
    
    clean:
        rm –rf  *.o  lab3p2
    

2 个答案:

答案 0 :(得分:2)

-c是否可能实际上是EN DASH字符而不是连字符?

-c告诉gcc"只需编译"代码并生成目标文件而不是可执行文件。 clean目标只是清理工作目录。

答案 1 :(得分:2)

  

“清洁:”部分做了什么?

Makefile的clean规则通常用于删除Makefile生成的任何编译文件。在这种情况下,将删除已编译的目标文件(.o文件)和lab3p2文件。

由于clean不是生成的文件,因此应将其设为phony rule

clean:
    rm –rf  *.o  lab3p2

.PHONY: clean
  

“-c”部分是什么意思? (谷歌搜索“gcc -c解释”和其他变体给了我一个大学的缩写gcc,等等)

这意味着编译源文件,但不运行链接器。来自man page

-c  Compile or assemble the source files, but do not link.  The linking stage
    simply is not done.  The ultimate output is in the form of an object file
    for each source file.
  

我收到此错误:

gcc –c lab3p2.c
gcc: –c: No such file or directory
make: *** [lab3p2.o] Error 1 

是一个短划线,它应该是hyphen-minus-)。

相关问题