MakeFile添加ifdef中参数的方法(其实是GCC种的预定义功能)

转载 2013年12月02日 18:39:46
关键词: Make宏定义 Make传递宏定义 Makefile中添加宏定义 Makefile -D

在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
$(CC) $(CFLAGS) $^ -o $@

clean:
-$(RM) -f *.o
-$(RM) -f $(TARGETS)


main.c文件的内容为:
#include <stdio.h>

int main()
{

#ifdef _YUQIANG
printf("Hello Yu Qiang, How are you?\n");
#else
printf("Sorry to lost you. \n");
#endif

return 0;
}


在端口中输入    make clean all
然后输入           ./myapp

结果                  Hello Yu Qiang, How are you?

原文地址:http://hi.baidu.com/20065562/item/2bca13116c0309443a176eab


再比如:

gcc编译的时候提供了预定义功能,参数是-D,  通过man gcc可以了解更多:
-D name
           Predefine name as a macro, with definition 1.

       -D name=definition
           Predefine name as a macro, with definition definition.  The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In particular, the definition will be truncated by embedded new-line characters.

可以通过以下例子解释一下:
int main()
{
    #ifdef HELLO
    printf("HELLO defined\n");
    #else
    printf("HELLO not define\n");
    #endif

    return 0;
}
在该程序中,判断是否已经定义了宏DEBUG,从而输出相应的语句。
如果编译该程序时采用了gcc -DHELLO, 则输出:HELLO defined

Linux之Makefile(ifdef)

ifdef 只是测试一个变量是否有值,不会对变量进行 替换展开来判断变量的值是否为空。对于变量“VARIABLE-NAME” ,除了 “VARIABLE-NAME=”这种情况以外,使用其它方式对它...
  • zhoudengqing
  • zhoudengqing
  • 2014年12月06日 18:53
  • 1040

makefile 的 ifdef, ifeq 使用及辨析

#可以用命令行传递变量 RELEASE = abc #ifdef 变量名称不能加$() ifdef RELEASE $(warning RELEASE defined) else $(warning...
  • hejinjing_tom_com
  • hejinjing_tom_com
  • 2014年11月27日 17:45
  • 5268

Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D

在源代码里面如果这样是定义的: #ifdef   MACRONAME //可选代码 #endif 那在makefile里面 gcc   -D   MACRONAME=MACRODEF 或者...
  • maopig
  • maopig
  • 2012年02月03日 09:49
  • 30314

makefile中的条件判断ifeq、ifneq、ifdef

使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。  一、示例  下面的例子,判断$(CC)变量是否“gcc”,如果...
  • nyist327
  • nyist327
  • 2015年01月09日 11:24
  • 2328

makefile 的ifeq和ifdef的区别

makefile详解 条件判断 二十 使用条件判断 —————— 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和...
  • bruce0532
  • bruce0532
  • 2012年06月19日 17:17
  • 68957

Linux学习笔记——例说makefile 增加宏定义

从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makef...
  • xukai871105
  • xukai871105
  • 2014年07月05日 20:37
  • 22008

makefile的基本结构和预定义变量

来源:http://www.aka.org.cn/Lectures/001/Lecture-1/make.html      *      GNU make    *      makefile 基本...
  • larntin2002
  • larntin2002
  • 2009年05月07日 16:11
  • 5207

C语言之详解#ifdef等宏及妙用

这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件...
  • thebestleo
  • thebestleo
  • 2016年05月26日 13:43
  • 6008

#ifdef的嵌套使用

//使用宏定义做控制开关时要注意 #include "iostream.h"   #define AA 1  //使用宏定义的值做控制开关 #define BB 1  //...
  • stormbjm
  • stormbjm
  • 2013年07月04日 16:31
  • 8575

#ifdef与#ifdefine()之间的区别

在查阅Linux内核源码的过程中,发现存在两种不同类型的条件编译语句:#ifdef MACRO_A和#if defined(MACRO_A)或#if !defined(MACRO_A) ...
  • stoic163
  • stoic163
  • 2017年06月21日 10:33
  • 2026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MakeFile添加ifdef中参数的方法(其实是GCC种的预定义功能)
举报原因:
原因补充:

(最多只允许输入30个字)