转自:http://blog.csdn.net/linuxheik/article/details/8051598

版权声明:本文为博主原创文章,未经博主允许不得转载。

Makefile,如何传递宏定义DEBUG

1, gcc中使用宏的例子:
在程序中,通过有这样的代码段:   
#ifdef   DEBUG   
printf("Debug   is   define!\n");   
#endif   
printf("Hello   World!\n");   
希望在编译时,传递DEBUG定义,实现Debug版本和Release版本的区别。

gcc   -DDEBUG   -o   ttt   a.c   b.c   
gcc     -o   ttt   a.c   b.c

gcc   -UDEBUG   -o   ttt   a.c   b.c   是取消宏定义

2, GNU Make

make是负责从项目的源代码中生成最终可执行文件和其他非源代码文件的工具。 make命令本身可带有四种参数:标志、宏定义、描述文件名和目标文件名。

其标准形式为:make [flags] [macro definitions] [targets]

Unix系统下标志位flags选项及其含义为:
-f file 指定file文件为描述文件,如果file参数为 '-' 符,那么描述文件指向标准输入。如果没有 '-f' 参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。在Linux中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。
-i 忽略命令执行返回的出错信息。
-s 沉默模式,在执行之前不输出相应的命令行信息。
-r 禁止使用隐含规则。

-n 非执行模式,输出所有执行命令,但并不执行。
-t 更新目标文件。
-q make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息。
-p 输出所有宏定义和目标文件描述。
-d Debug模式,输出有关文件和检测时间的详细信息。

Linux下make标志位的常用选项与Unix系统中稍有不同,下面只列出了不同部分:
-c dir 在读取 makefile 之前改变到指定的目录dir。
-I dir 当包含其他 makefile文件时,利用该选项指定搜索目录。
-h help文挡,显示所有的make选项。
-w 在处理 makefile 之前和之后,都显示工作目录。
通过命令行参数中的target ,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件。

2.1 make macro definitions

makefile如下:

  LIBES= -LS

# use macros rewrite makefile ..

prog: $(OBJECTS)

cc $(OBJECTS) $(LIBES) -o prog

此时假如执行不带参数的make命令,将连接三个目标文档和库文档LS;但是假如在make命令后带有新的宏定义:

make "LIBES= -LL -LS"

命令行后面的宏定义将覆盖makefile文档中的宏定义。若LL也是库文档,此时make命令将连接三个目标文档连同两个库文档LS和LL。

make local_all  "SW=SWM_DEBUG"

2.2  追加宏定义

c file:

#ifdef  SWM_DEBUG
Tracker->Debug( "%s:%d:%s, none do  iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxiiiiiiiiiiiiiiiiiiiiiii\n",__FILE__, __LINE__,__FUNCTION__ );
#endif

Makefile file:

CPPFLAGS += -DDEBUG_MEMORY

CPPFLAGS += -DDEBUG_CLASS_NAMES

make 命令:

make local_all  "CPPFLAGS += -DSWM_DEBUG"

Makefile,如何传递宏定义DEBUG【转】的更多相关文章

  1. Makefile中进行宏定义-***

    实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解 ...

  2. Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D【转】

    本文转载自:http://blog.csdn.net/maopig/article/details/7230311 在源代码里面如果这样是定义的:#ifdef   MACRONAME//可选代码#en ...

  3. Makefile ------ 在Makefile中进行宏定义-D

    在Makefile中我们可以通过宏定义来控制源程序的编译.只要在Makefile中的CFLAGS(变量名随意)中通过选项-D来指定你于定义的宏即可. 如:CFLAGS += -D _YUQIANG在编 ...

  4. Makefile中宏定义

    实际上是gcc命令支持-D宏定义,相当于C中的全局#define: gcc -D name gcc -D name=definition Makefile中可以定义变量(和宏很像),但是是给make解 ...

  5. Makefile 宏定义 -D

    一.GCC编译器中使用:        -D macro=string,等价于在头文件中定义:#define   macro   string. 例如:-D TRUE=true,等价于:#define ...

  6. VLC-Android和VLC几个关键宏定义的分析

    在用SourceInsight分析VLC-Android源码过程中,有几个宏定义在源代码中一直没有找到出处,比如 HAVE_DYNAMIC_PLUGINS和__PLUGIN__,以及MODULE_NA ...

  7. Makefile中的特殊宏定义以及实用选项

    Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $?    当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@   当前目标我名字 $<   当前依赖文件的名 ...

  8. Makefile中用宏定义进行条件编译

    在源代码里面如果这样是定义的: #ifdef   MACRONAME //可选代码 #endif 那在makefile里面 gcc   -D   MACRONAME=MACRODEF 或者 gcc   ...

  9. iOS中忽略NSLog打印信息(通过PCH文件中定义DEBUG宏解决)

    iOS中忽略NSLog打印信息 解决办法: 1.新建PrefixHeader_pch文件,在该文件中定义一下宏 //通过DEBUG宏的定义来解决Debug状态下和Release状态下的输出 #ifde ...

随机推荐

  1. Linux命令行–基本的bash shell命令

    启动shell: /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名 用户密码 用户的系统UID 用户的系统GID 用户的全名 用户 ...

  2. 禁用LMHOSTS和NetBIOS后提升上网速度 ?

    LMHOSTS 文件是 windows 中进行 netbios 静态解析时使用的,其作用类型于 HOSTS 文件. 今天发现这个东西有点问题,在用ADSL上网时,明明 IP . DNS 都设置得好好的 ...

  3. IntelliJ IDEA 的 Java 热部署插件 JRebel 安装及使用

    JRebel 介绍 JRebel for Intellij JRebel 在 Java Web 开发中, 一般更新了 Java 文件后要手动重启 Tomcat 服务器, 才能生效,  自从有了 JRe ...

  4. linux type命令用法_转

    转自:http://codingstandards.iteye.com/blog/831504 在脚本中type可用于检查命令或函数是否存在,存在返回0,表示成功:不存在返回正值,表示不成功. $ t ...

  5. Paramiko 模块使用

    一.安装,下载 1.下载安装 pycrypto-2.6.1.tar.gz (apt-get install python-dev) 解压,进入,python setup.py build[编译],py ...

  6. random模块使用

    import random #print random.random() #0.522622274753 #print random.randint(,) 生成1-5之间的一个随机整数 #print ...

  7. linux查看公网地址

    curl cip.cc curl http://members.3322.org/dyndns/getip

  8. runcluvfy.sh运行结果

    $ ./runcluvfy.sh stage -pre crsinst -n rac11g1,rac11g2 -verbose Performing pre-checks for cluster se ...

  9. jsp eclipse 创建jsp项目

    选择File菜单 File->new->Other... 选择Dynamic Web Project项目->Next 写入项目->Finish 在WebContent鼠标右键- ...

  10. 转:Python获取随机数(中文)

    下面介绍下random中常见的函数. 前提:需要导入random模块 >>>import random 1.random.random random.random() 用于生成一个0 ...