Gcc 为什么Makefile没有';你不能这样工作吗?

Gcc 为什么Makefile没有';你不能这样工作吗?,gcc,Gcc,我正在学习makefile的教程。 对于Makefile 2,有正确的代码: CC=gcc CFLAGS=-I. hellomake: hellomake.o hellofunc.o $(CC) -o hellomake hellomake.o hellofunc.o -I. 为什么它不能这样工作: hellomake: hellomake.o hellofunc.o gcc -o hellomake hellomake.o hellofunc.o -I. 下面是错误:

我正在学习makefile的教程。 对于Makefile 2,有正确的代码:

CC=gcc
CFLAGS=-I.

hellomake: hellomake.o hellofunc.o
     $(CC) -o hellomake hellomake.o hellofunc.o -I.
为什么它不能这样工作:

hellomake: hellomake.o hellofunc.o
    gcc -o hellomake hellomake.o hellofunc.o -I.
下面是错误:

hellomake.c:2:10: error: 'hellomake.h' file not found with <angled> include; use
      "quotes" instead
#include <hellomake.h>
         ^~~~~~~~~~~~~
         "hellomake.h"
1 error generated.
hellomake.c:2:10:错误:“hellomake.h”文件未与include一起找到;使用
改为“引用”
#包括
^~~~~~~~~~~~~
“hellomake.h”
生成1个错误。
在您使用的第一个“工作”生成文件中

CFLAGS=-I.
将源文件编译为目标文件时将使用,并告诉编译器(及其前置器)当前目录应添加到系统头文件目录列表中

第二个makefile不这样做。编译器在创建对象文件时没有额外的标志。因此编译器不会将当前目录添加到目录列表中

第二个makefile中的
-I
选项是链接时。到那时,对象文件已经创建(如果没有错误,应该已经创建),并且链接器根本没有使用
-I
标志。

在您使用的第一个“工作”生成文件中

CFLAGS=-I.
将源文件编译为目标文件时将使用,并告诉编译器(及其前置器)当前目录应添加到系统头文件目录列表中

第二个makefile不这样做。编译器在创建对象文件时没有额外的标志。因此编译器不会将当前目录添加到目录列表中


第二个makefile中的
-I
选项是链接时。到那时,对象文件已经创建(如果没有错误,应该已经创建),链接器根本不使用
-I
标志。

Just know
CFLAGS
是预定义的宏。Just know
CFLAGS
是预定义的宏。