(如果make指定了“-e”参数,那么,系统环境变量将覆盖Makefile中定义的变量)。因此,如果我们在环境变量中设置了“CFLAGS”环境变量,那么我们就可以在所有的Makefile中使用这个变量了。这对于我们使用统一的编译参数有比较大的好处。如果Makefile中定义了CFLAGS,那么则会使用Makefile中的这个变量,如果没有定义则使
(如果make指定了“-e”参数,那么,系统环境变量将覆盖Makefile中定义的变量) 因此,如果我们在环境变量中设置了“CFLAGS”环境变量,那么我们就可以在所有的Makefile中使用这个变量了。这对于我们使用统一的编译参数有比较大的好处。如果Makefile中定义了CFLAGS,那么则会使用Makefile中的这个变量,如果没有定义则使用系统环...
2.11.2 命令参数变量 示例: 下面以 CFLAGS 为例演示 # test.c 内容 #include <stdio.h> int main(int argc, char *argv[]) { printf ("Hello Makefile\n"); return 0; } # Makefile 内容 test: test.o $(CC) -o test test.o # bash 中用 make 来测试 $ ll total 24K -rw-r--r-- 1...
因此,如果我们在环境变量中设置了“CFLAGS”环境变量,那么我们就可以在所有的Makefile中使用这个变量了。这对于我们使用统一的编译参数有比较大的好处。如果Makefile中定义了CFLAGS,那么则会使用Makefile中的这个变量,如果没有定义则使用系统环境变量的值,一个共性和个性的统一,很像“全局变量”和“局部变量”的特性。
CFLAGS = -g -O2 SRC_FILES变量:用于指定源文件列表 SRC_FILES = main.c foo.c bar.c OBJ_FILES变量:用于指定目标文件列表 二、Makefile中变量的赋值方式 1.简单赋值 简单赋值其实就是和我们在C语言当中使用 = 来赋值是一样的。 当我们要调用这个变量的使用可以使用$符号进行调用。
CFLAGS = $(CFLAGS) -O 或: A = $(B)B = $(A) 这会让make陷入无限的变量展开过程中去,当然,我们的make是有能力检测这样的定义,并会报错。还有就是如果在变量中使用函数,那么,这种方式会让我们的make运行时非常慢,更糟糕的是,他会使用得两个make的函数“wildcard”和“shell”发生不可预知的错误。因为...
(BUILD_DIR)/%.o,$(notdir $(SOURCES))) VPATH=$(SRC_DIR) $(BUILD_DIR)/$(TARGET):$(OBJS) $(cc) $^ -o $@ $(BUILD_DIR)/%.o:%.c $(INCLUDES) | creat_build $(cc) -c $< -o $@ $(CFLAGS) .PHONY:clean creat_build clean: rm -r $(BUILD_DIR) creat_build: mkdir -p $...
(CC)−c(CFLAGS)<−o 这个隐式规则说明了.o的目标文件依赖于同名的.c文件,其中<及<为第一个prerequisites条件,也就是目标名称.c, 在makefile中,我们通常要编写3种隐式规则,第1种为代码链接规则,第2种为源代码编译规则,第3种为汇编代码编译规则。
CFLAGS = $(CFLAGS) -O 或: A = $(B) B = $(A) 这会让make陷入无限的变量展开过程中去,当然,我们的make是有能力检测这样的定义,并会报错。还有就是如果在变量中使用函数,那么,这种方式会让我们的make运行时非常慢,更糟糕的是,他会使用得两个make的函数“wildcard”和“shell”发生不可预知的错误。因...
追加赋值 ( += ) 原变量用空格隔开的方式追加一个新值。(和C语言+=类似) a1 = a.o; a1 += b.o; a1 = a.o b.o 特殊字符 举例说明 TARGET?=demo OBJS:=main.o add.o sub.o CC:=gcc CFLAGS:= -c -o CFLAGSs:=-o ( T A R G E T ) : (TARGET): (TARGET):(OBJS) ...