Makefile中的CFLAGS,LDFLAGS,LIBS】的更多相关文章

CFLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C++ 编译器的选项.这两个变量实际上涵盖了编译和汇编两个步骤. CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include.同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来. LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置.用法:L…
CFLAGS:C编译器选项,而CXXFLAGS表示C++编译器的选项 1. CFLAGS参数 选项 说明 -c 用于把源码编译成.o对象文件,不进行链接过程 -o 用于连接生成可执行文件,在其后可以指定输出文件的名称 -g 用于在生成的目标可执行文件中,添加调试信息,可以使用GDB调试 -Idir 用于把新目录添加到include路径上,可以使用相对和绝对路径,"-I.", "-I./include", "-I/opt/include" -Wal…
在Makefile中我们可以通过宏定义来控制源程序的编译.只要在Makefile中的CFLAGS(变量名随意)中通过选项-D来指定你于定义的宏即可. 如:CFLAGS += -D _YUQIANG在编译的时候加上此选项就可以了: $(CC) $(CFLAGS) $^ -o $@ 例如: Makefile文件内容为: CC = gcc RM = rm CFLAGS += -D _YUQIANG TARGETS := myapp all:$(TARGETS) $(TARGETS):main.c $(…
实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解释器用的,对所编译的文件完全没有作用.   MSTAR:宏定义方式:字串定义方式和值定义方式 CC_TVOPTS += -DMS_BOARD_TYPE_SEL=$(BOARD_TYPE_SEL) CC_TVOPTS += -DMS_SW_CUS_SEL=SW_CONFIG_TRUNK_ATVMM C…
本文转载自:http://blog.csdn.net/maopig/article/details/7230311 在源代码里面如果这样是定义的:#ifdef   MACRONAME//可选代码#endif 那在makefile里面gcc   -D   MACRONAME=MACRODEF或者gcc   -D   MACRONAME 这样就定义了预处理宏,编译的时候可选代码就会被编译进去了. 对于GCC编译器,有如下选项:        -D macro=string,等价于在头文件中定义:#d…
实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解释器用的,对所编译的文件完全没有作用.   MSTAR:宏定义方式:字串定义方式和值定义方式 CC_TVOPTS += -DMS_BOARD_TYPE_SEL=$(BOARD_TYPE_SEL) CC_TVOPTS += -DMS_SW_CUS_SEL=SW_CONFIG_TRUNK_ATVMM C…
转自:http://www.2cto.com/os/201302/191344.html   makefile中的自动化变量$@,$%,$   自动化变量  模式规则中,规则的目标和依赖文件名代表了一类文件名:规则的命令是对所有这 一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去 意义.那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点.  假如你需要书写一个将.c 文件编译到.o 文件的模式规则,那么你该如何为gcc 书写 正确的源文件名?当然了,不能使…
Libraries Static Libraries a collection of ordinary object files (目标文件的集合) loaded at program link time (链接阶段加载) 不再那么重要的优势 节省编译时间 理论上稍快的执行速度 use the -l option to specify the library the -l option is a linker option, and thus needs to be placed AFTER t…
摘于:http://bbs.csdn.net/topics/120024677 (1)在makefile的依赖关系中用不用体现.h头文件?(2)如果在依赖关系中要体现.h头文件,应该体现到什么层次?==============================(1)在makefile的依赖关系中用不用体现.h头文件?============================== 下面是我的一些认识: 头文件中定义的是接口(函数接口,文件外全局变量和宏定义),它的作用是向调用文件封装函数的实现过程.在…
makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束.    例如,在 GNU Make 里有一个叫 'wildcard' 的函数,它有一个参数,功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔.    你可以像下面所示使用这个命令:    SOURCES = $(wildcard *.c)    这行会产生一个所有以 '.c' 结尾的文件的列表,然后存入变量 SOURCES 里.当然你不需要一…
转自:https://blog.csdn.net/srw11/article/details/7516712 1.wildcard : 扩展通配符 2.notdir : 去除路径 3.patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd test$ mkdir sub 在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件 建立一个简单的Makefilesrc=$(wildcard *.…
notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1.makefile里的函数 makefile里的函数使用,和取变量的值类似,是以一个'$'开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname  arg1,arg2,arg3...). 可能这里的'$'更像是从某个地址取值类似的操作. 2. wildcard 使用:SRC = $(w…
转自:http://blog.chinaunix.net/uid-28458801-id-3495215.html 自动化变量 模式规则中,规则的目标和依赖文件名代表了一类文件名:规则的命令是对所有这一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去意义.那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点. 假如你需要书写一个将.c 文件编译到.o 文件的模式规则,那么你该如何为gcc 书写正确的源文件名?当然了,不能使用任何具体的文件名,因为在每一次执行模…
4.12 静态模式静态模式规则是这样一个规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件.静态模式规则比多目标规则更通用,它不需要多个目标具有相同的依赖.但是静态模式规则中的依赖文件必须是相类似的而不是完全相同的.4.12.1静态模式规则的语法首先,我们来看一下静态模式规则的基本语法:TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ...COMMANDS..."TAGETS"列出了此规则的一系列目标文件.像普通规…
转自:https://blog.csdn.net/QQ1452008/article/details/52247944 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ1452008/article/details/52247944 前言 每个编写过Makefile的程序员都可能遇见过Makefile中内含的陷阱,本博文旨在展现陷阱,提醒自己,也供大家一起学习. 本博文会随所遇见的Makefile陷阱有关的问题而进行后续的更新. 陷阱一:在定…
一.描述 Makefile的函数调用,很像变量的使用,也是以"$"来标识的,其语法如下: $(<function> <arguments> ) 或是 ${<function> <arguments>} 这里,<function>就是函数名,make支持的函数不多.<arguments>是函数的参数,参数间以逗号","分隔,而函数名和参数之间以"空格"分隔 Makefile中支…
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为:ifdef DEFINE_VRE    VRE = “Hello World!”elseendif ifeq ($(OPT),define)    VRE ?= “Hello World! First!”endif ifeq ($(OPT),add)    VRE += “Kelly!”endif ifeq ($(OPT),recover)   …
Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $?    当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@   当前目标我名字 $<   当前依赖文件的名字 $*    不包括后缀名的当前依赖文件的名字 $^   规则的所有依赖文件列表,使用空格分隔.如果目标是静态库文件名,它所代表的只能是所有库成员(.o文件)名.一个文件可重复的出现在目标的依赖中,变量“$^”只记录它的一次引用情况.就是说变量“$^”会去掉重复的依赖文件. make -C /the/d…
Makefile 中:= ?= += =的区别   在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为:ifdef DEFINE_VRE    VRE = “Hello World!”elseendif ifeq ($(OPT),define)    VRE ?= “Hello World! First!”endif ifeq ($(OPT),add)    VRE += “Kelly!”endif…
在Makefile中引用其他Makefile文件的方法是,使用inclue   filename.mk…
转自:http://blog.csdn.net/kesaihao862/article/details/7332528 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的源程序(hello.c):…
在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码.eg:xx = xx1         // 这里时makefile代码yy:xx = xx2   // 这是是makefile代码,makefile允许变量赋值时,'='号两边留空格yy:    xx=xx3 // 只有这里是shell代码 ,shell不允许‘=’号两边有空格哦.…
刚开始用make的时候,以为makefile中名字叫做main的target就是make默认执行的target(中文翻译叫做标的(di,四声),下面统一称呼为标的),然后曾经很天真地犯过这样的错误,就一个.c文件(名字叫做main.c),功能是打印helloworld,然后我写了这样的makefile来编译: main: gcc -o main main.c 结果第一次make命令能编译,后面如果还想再用make命令编译的话,就会出现这样的错误: 即使更改了main.c中的代码,也会出现这样的错…
转载:http://blog.csdn.net/wzw88486969/article/details/11739737 在内核的 Makefile 中会在多处地方看到 FORCE ,比如: # vmlinux image - including updated kernel symbols vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE 实际上它是一个伪目标: PHONY…
转:http://www.cnblogs.com/xmphoenix/archive/2012/02/22/2363335.html 指示符“include”.“-include”和“sinclude” 如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile...),而且当前目录下也不存在此文件:make将根据文件名试图在以下几个目录下查找:首先,查找使用命令行选项“-I”或者“--include-dir”指定的目录,如果找到指定的文件,则使用这个文…
makefile里的变量就像一个变量,变量的作用主要如下: (1)保存文件名列表. (2)保存编译器的参数. makefile中的变量是用一个字符串在makefile中定义的,这个文本串就是变量的值.只要在一行的开始写下这个变量的名字,后面跟一个‘=’,然后跟要设定的这个变量的 值即可定义变量,下面是定义变量的语法: 变量名=字符串 使用时 ,把变量把括号括起来.并在前面加上“$”符号,就可以引用变量的值: $(变量名) make解释规则时“变量名”在等式右端展开为定义它的字符串,变量一般在ma…
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的源程序(hello.c): int main(int argc,char **argv) { printf("Hello Linux\n"…
伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过   PHONY来指明. PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的妙处. 1.如果我们指定的目标不是创建目标文件,而是使用makefile执行一些特定的命令,例如: clean: rm *.o temp 我们希望,只要输入”make clean“后,”rm *.o temp“命令就会执行.但是,当当前目录中存在一个和指定目标重名…
如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile...),而且当前目录下也不存在此文件:make将根据文件名试图在以下几个目录下查找:首先,查找使用命令行选项“-I”或者“--include-dir”指定的目录,如果找到指定的文件,则使用这个文件:否则继续依此搜索以下几个目录(如果其存在):“/usr/gnu/include”.“/usr/local/include”和“/usr/include”. 当在这些目录下都没有找到“include”指…
转载自:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html 在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为:ifdef DEFINE_VRE    VRE = “Hello World!”elseendif ifeq ($(OPT),define)    VRE ?= “Hello World! First!”endi…