makefile这样写: ifdef DEBUG CFLAGS += -DDEBUG=1 -O0 -ggdb RELMODE = debug else CFLAGS += -DDEBUG=0 -...O0 -s RELMODE = release endif 编译可以这样: make DEBUG=1 #可以用命令行传递变量 RELEASE = abc #ifdef 变量名称不能加$()...ifdef RELEASE $(warning RELEASE defined) else $(warning RELEASE not defined) endif #ifeq 后面参数要叫...make变量可以在makefile中定义,也可以由make命令行传递。...比如,你在代码里面需要定义一个宏DEBUG来打开调试开关,代码如下:int main(){int i=9;#ifdef DEBUGi=1;#elsei=0;#endifprintf("i=%d\n",
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取...
zhangchiytu/article/details/7563329 先看个例子: #define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA 0 #ifdef...#ifdef的使用 #if后面接的是一个宏 #ifdef (x) ...code......#endif 这个#ifdef 它不管里面的“x”的逻辑是“真”还是“假”,它只管这个程序前面的宏定义里面有没有定义“x”这个宏(即在这里#define x 1和#define x 0等效,都等同于...#if defined的使用 #if defined() 的使用和#ifdef的用法一致 #if !defined()又和 #ifndef 的用法一致。...第二:别忘了#endif 明白了之间的区别问题就变得非常的容易,修改上述代码只要把其中的#ifdef改成#if就可以达到目的。
#ifdef 和 #ifndef常用于解决头文件重复包含的问题。 #ifdef的使用 #ifdef的使用和#if defined()的用法一致 #ifndef又和#if !
Makefile编写 程序的编译和链接 使用C、C++编写可执行文件,首先要把源文件编译成中间代码文件,Linux下是.o文件,即Object File,这个动作叫做编译(complie)。...于是Makefile闪亮登场。 Makefile确定整个工程的编译规则,只需要一个make命令,就可以实现“自动化编译”。...这就是Makefile的规则,也就是Makefile中最核心的内容。..." 或 "makefile"的文件。...所以,为了makefile的易维护,在makefile中我们可以使用变量。makefile的变量也就是一个字符串。可以理解为C语言中的宏。
前言 这几天的实验让我觉得有必要学习一下makefile 参考博客:博客 会不会写makefile,从一个侧面说明了一个人是否具有完成大型工程的能力 makefile带来的好处是自动化编译 规则...上述make的工作方式 make寻找名为makefile或者Makefile的文件 寻找第一个目标文件,上述例子edit为最终的目标文件 如果edit文件不存在,那么make会寻找edit后的.o文件,...的文件系统 如果你不想使用makefile或者Makefile的文件名,可以用make -f file,file是你的文件名。...makefile中包含其他makefile的指令如同c++ 一样: -include foo.make a.mk b.mk c.mk e.mk f.mk 减号仍然表示不管怎样报错都继续执行下去,上面的命令可以采用部分正则规则简化...: -include foo,make *,mk $(bar) 工作方式 读入所有的Makefile。
Makefile是按照某种脚本语法编写的文本文件,而GNU make能够对Makefile中指令进行解释并执行编译操作。...下面对makefile的相关问题进行简单介绍: 1、Makefile的基本结构 Makefile的一般结构: target……:dependency…… command…… 结构中各部分的含义: (1...这就是Makefile的规则。也就是Makefile中最核心的内容。...2.1 Makefile中的变量 (1)Makefile中定义的变量,与C/C++语言中的宏一样,代表一个文本字串,在Makefile被执行时候变量会自动地展开在所使用的地方。...Makefile中的变量可以使用在“目标”,“依赖目标”,“命令”或Makefile的其它部分中。
#if #ifdef和#ifndef用法 移位运算符的优先级高于条件运算符,重载是不能改变运算符优先级的,这点要注意,所以代码应当像下面这样调整,写宏的时候一定要注意优先级,尽量用括号来屏蔽运算符优先级...x:y int main() { int a=10,b=20; #ifdef MAX printf("40:The larger one is %dn",MAXIMUM...和#ifndef区别 #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。...其中#else部分也可以没有,即: #ifdef 程序段1 #denif 这里的“程序段”可以是语句组,也可以是命令行。这种条件编译可以提高C源程序的通用性。...有时也采用下面的形式: #ifndef 标识符 程序段1 #else 程序段2 #endif 只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。
联合编译 makefile 上面的例子只是一个最简单的 makefile 的使用方法,但实际项目里面不可能只有一个文件,实际可能是多个 .c .h 组成,像这样的项目,我们该如何通过 makefile...gcc main.o add.o sub.o mul.o -o app makefile 变量 接下来我们引入 makefile 变量机制,来修改一下上面的 makefile 文件。...makefile 自动变量 makefile 中有一些预定义的变量,你可以理解它像是 C 语言中的一些关键字,分别有不同的意义,我们列举几个常用的自动变量(其他还有很多),通过上面的 makefile...makefile 中的 all 因为 makefile 的执行流程是找到第一个目标作为最终生成的目标,如果顺序错乱了,makefile 就可能报错,all 方法就是解决这个问题而存在的,并且,all 方法可以让一个...至此 makefile 的功能说明到此为止一,下面就是收集的一些常用做测试用的 makefile 代码。
Makefile包含 目标文件、依赖文件、可运行命令三部分。 ...整个Makefile文件都是这样的格式。...参考链接: https://blog.csdn.net/haoel/article/details/2886 Makefile 伪目标: https://www.cnblogs.com/hnrainll
再完善下代码: #include "stdio.h" int main() { if(1 == 1) { printf("Hello, If\n"); #ifdef...差别就是多了中间那段#ifdef.......stdio.h" #define HEHE 123 int main() { if(1 == 1) { printf("Hello, If\n"); #ifdef
Makefile基础 在Linux环境下,当我们输入make命令时,它就在当前目录查找一个名为Makefile的文件,然后,根据这个文件定义的规则,自动化地执行任意命令,包括编译命令。...例如: SRC=$(wildcard *.c) 变量可以提高Makefile的可读性和可维护性。...注意: 包含依赖文件时,如果依赖文件不存在,Makefile可能会报错。为此,可以使用如下方式: -include deps.d 这表示如果deps.d不存在,Makefile将不会报错。...完善Makefile 通过上述方法,我们可以逐步完善一个Makefile。....$$$$ $@ 通过以上内容的学习,已经足够编写寄出的Makefile~
title: Makefile文件 文章目录 title: Makefile文件 Makefile文件 Makefile文件 make命令执行时,需要一个makefile文件,以告诉make命令需要怎么样的去编译和链接程序
下做C/C++开发时经常用到,会写Makefile是程序员的必备技能。...通过主目录下的Makefile分别管理各个目录下的Makefile编译。这就要用到嵌套执行。...| |---Makefile | |---bin | |---server make -C lib 该命令表示执行lib目录下的Makefile。...在调用子目录Makefile,有时我们需要传递参数,两种方法: 方法一: 在上层Makefile中使用”export”关键字对要传递的变量进行声明。...$(MAKE) -C src DIR=/var/log 条件语句 Makefile中常见的条件语句有: ifeq-else-endif ifneq-else-endif ifdef-else-endif
#一个通用的Makefile,可以在linux各大平台下通用编译c程序,这个版本在gcc平台下实现,如需要课更改第二部的gcc,也可以在第三部添加所需要的库,如有错误,欢迎即使纠正 #1.遵循可移植操作系统接口
#ifdef 就是”if define”的意思,即”如果定义了” #ifdef 标识符1 程序段1 #else 程序段2 #endif 如果定义过标识符1,那就执行程序段1,负责执行程序段2.也可以有如下用法...: #ifdef 标识符1 程序段1 #endif #ifndef “if not define”,如果没有定义过....; } #ifdef CONFIG_DEBUG printf("open test.txt ok"); #endif return 0; } 当不想让程序执行输出语句时,把#define
#ifdef宏名: #include #include using namespace std; #define dhy //定义宏名 int main() {...#ifdef dhy //如果宏名定义了执行ifdef代码 cout << "你好,世界" << endl; #else //未定义宏名则会执行else后面的代码 cout << "再见,世界"...<< endl; #endif //dhy _getch(); return 0; } #ifndef宏名:与ifdef宏名类似且相反 #include #include<conio.h
函数 Makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束。
在Makefile中可以使用函数来处理文本,从而让我们的命令或是规则更为灵活和智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。...示例: ERROR="can't find commad g++" ifdef ERROR $(error error is $(ERROR1)) endif 因为ERROR值非空,所以输出错误信息如下错误信息...makefile:3: *** error is "can't find commad g++"....示例: 假设有以下makefile。...---- 参考文献 [1]Makefile经典教程(掌握这些足够) [2]GNU make manual
毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。...Kconfig和Makefile就是Linux Kernel迷宫里的地图。地图引导我们去认识一个城市,而Kconfig和Makefile则可以让我们了解一个Kernel目录下面的结构。...利用Kconfig和Makefile寻找目标代 就像利用地图寻找目的地一样,我们需要利用Kconfig和Makefile来寻找所要研究的目标代码。...接下来阅读Makefile文件。...Kconfig和Makefile很好的帮助我们定位到了所要关注的目标,就像我们到一个陌生的地方要随身携带地图,当我们学习Linux内核时,也要谨记寻求Kconfig和Makefile的帮助。
领取专属 10元无门槛券
手把手带您无忧上云