make file

来源:互联网 发布:网络言论自由的利与弊 编辑:程序博客网 时间:2024/05/09 20:54

说到make file 首先就不等不说GNU gcc了

 

**********************gcc/egcs 的主要选项********* 
gcc 命令的常用选项 
选项 解释 
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 
例如 asm 或 typeof 关键词。 
-c 只编译并生成目标文件。 
-DMACRO 以字符串“1”定义 MACRO 宏。 
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。 
-E 只运行 C 预编译器。 
-g 生成调试信息。GNU 调试器可利用该信息。 
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。 
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。 
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
 
-m486 针对 486 进行代码优化。 
-o FILE 生成指定的输出文件。用在生成可执行文件时。 
-O0 不进行优化处理。 
-O 或 -O1 优化生成代码。 
-O2 进一步优化。 
-O3 比 -O2 更进一步优化,包括 inline 函数。 
-shared 生成共享目标文件。通常用在建立共享库时。 
-static 禁止使用共享连接。 
-UMACRO 取消对 MACRO 宏的定义。 
-w 不生成任何警告信息。 
-Wall 生成所有警告信息。

 

上述所以是资料列举的常用选项 而我常用和知道的 也就标记的那几个 悲剧...

 

Makefile 变量

 

还有一些设定好的内部变量,它们根据每一个规则内容定义。三个 比较有用的变量是 $@, $< $^ (这些变量不需要括号住)。 $@ 扩展成当前规则的目的文件名, $< 扩展成依靠列表中的第 一个依靠文件,而 $^ 扩展成整个依靠的列表(除掉了里面所有重 复的文件名)。利用这些变量,我们可以把上面的 makefile 写成:

    === makefile 开始 ===

    OBJS = foo.o bar.o

    CC = gcc

    CFLAGS = -Wall -O -g

    

    myprog : $(OBJS)

     $(CC) $^ -o $@

    

    foo.o : foo.c foo.h bar.h

     $(CC) $(CFLAGS) -c $<-o $@

    

    bar.o : bar.c bar.h

     $(CC) $(CFLAGS) -c $<-o $@

    === makefile 结束 ===

 

2.6 函数 (Functions)

     makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后 用关括号结束。例如,在 GNU Make 里有一个叫 'wildcard' 的函 数,它有一个参数,功能是展开成一列所有符合由其参数描述的文 件名,文件间以空格间隔。你可以像下面所示使用这个命令:

    

    SOURCES = $(wildcard *.c)

    

    这行会产生一个所有以 '.c' 结尾的文件的列表,然后存入变量 SOURCES 里。当然你不需要一定要把结果存入一个变量。

    另一个有用的函数是 patsubst patten substitude, 匹配替 换的缩写)函数。它需要3个参数——第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的 由空格分隔的字列。例如,处理那个经过上面定义后的变量,

    

    OBJS = $(patsubst %.c,%.o,$(SOURCES))

    

    这行将处理所有在 SOURCES 字列中的字(一列文件名),如果它的 结尾是 '.c' ,就用 '.o' '.c' 取代。注意这里的 % 符号将匹 配一个或多个字符,而它每次所匹配的字串叫做一个‘柄’(stem) 在第二个参数里, % 被解读成用第一参数所匹配的那个柄。