如何自动生成makefile文件&gt

大家来帮我看看怎样写一个这样的Makefile文件,通过Makefile文件编译这个多文件的C语言程序_百度知道
大家来帮我看看怎样写一个这样的Makefile文件,通过Makefile文件编译这个多文件的C语言程序
程序不必复杂,通过该 Makefile 文件编译这个多文件的 C语言程序,只要是多文件并且可以正常运行即可。然后自己动手写一个最简单的 Makefile 文件动手写一个多文件的 C 语言程序(如一个文件的 main 函数调用另外一个文件的函数打印一个 hello world)
提问者采纳
c func.o}makefile;main(){ func();func:&nbsp:&nbsp.o.h&).o&outall&void&nbsp.c @gcc&main:&nbsp.ofunc(){ printf(&就直接声明了int&-o&main:&nbsp.c&void&func.c makefile-c&nbsp.c#include&nbsp.c @gcc&nbsp.o;//这个应该放在头文件中的&nbsp.c&nbsp.h&func();-o&main.PHONY.o @gcc&}&extern&nbsp.o&main.c#include&hello&nbsp.h&&lt.o&比如-o&func.o&简单起见&-c&world\n&quot以下是一个最简单的多文件+makefile的形式编译采用gcc 你可以修改成你的编译器三个文件 main
提问者评价
来自团队:
其他类似问题
为您推荐:
makefile的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁No.文字表記10進表記16進表記文字Comment001&&#34;&#x22;&&&quotation mark = APL quote002&&#38;&#x26;&&&ampersand003&&#60;&#x3C;&&&less-than sign004&&#62;&#x3E;&&&greater-than sign005&&#160;&#xA0;&&&no-break space = non-breaking spaceiSO 8859-1 characterschar glyphHTML tag&&?&?&?&¤&?&?&§&¨&(C)&?&<<&?&&&(R)&?&°&±&?&sup2;?&sup3;?&u&?&·&,&?&sup1;?&>>& 1/4 &frac14; 1/2 &frac12; 3/4 &frac34;?&?&A?&A?&A?&A?&A?&AAE&AE?&C?&E?&E?&E?&E?&I?&I?&I?&I?&ETH;?&N?&O?&O?&O?&O?&O×&?&O?&U?&U?&U?&U?&Y?&THORN;ss&à&á&?&?&?&?&ae&?&è&é&ê&?&ì&í&?&?&?&?&ò&ó&?&?&?&÷&?&ù&ú&?&ü&?&?&?&Math symbolsLatin Extended-Bchar glyphHTML tag?&Arrowschar glyphHTML tag←&↑&→&↓&&?&<=&lA?&uA=>&rA?&dA&hAMathematical Operatorschar glyphHTML tag?&?&?&?&?&∈&?&?&∏&∑&-&*&√&∝&∞&∠&∧&∨&∩&∪&∫&∴&there4;&#8764;&?&≈&≠&≡&≤&≥&?&?&?&?&?&⊕&?&⊥&?&General Punctuationchar glyphHTML tago&…&′&″&P?&/&Miscellaneous Technicalchar glyphHTML tag?&?&?&?&?&?&Geometric Shapeschar glyphHTML tag?&Miscellaneous Symbolschar glyphHTML tag?&?&?&?&Letterlike Symbolschar glyphHTML tag?&I&R&(TM)&?&Greekchar glyphHTML tagΑ&AΒ&BΓ&GΔ&DΕ&EΖ&ZΗ&EΘ&TΙ&IΚ&KΛ&LΜ&Mu;Ν&Nu;Ξ&Xi;Ο&OΠ&Pi;Ρ&RΣ&SΤ&TΥ&UΦ&PΧ&CΨ&PΩ&Oα&β&γ&δ&ε&ζ&η&θ&ι&κ&λ&μ&ν&ξ&ο&π&ρ&?&σ&τ&υ&φ&χ&ψ&ω&?&?&?&Special characters for HTMLC0 Controls and Basic Latinchar glyphHTML tag&&&&&&&&Latin Extended-Achar glyphHTML tagOE&OEoe&?&S?&?&YSpacing Modifier Letterschar glyphHTML tag^&~&General Punctuationchar glyphHTML tag&&&&&&?&?&?&?&–&—&‘&’&,&“&”&,,&+&?&D‰&<&>&EUR&#include &&,#include,amp,#include,详解,参考,说明_LINUX_【联盟电脑】
您现在的位置: >
#include &&
/*#include && 详解 参考 说明 &create & 持续添加*/#include &unistd.h& //sync open,read,fcntl,close,lseek,sync,fsync,fwrite isatty#include &stdlib.h& // malloc,free,realloc,brk calloc mkstemp &*env#include &stdio.h& // clearerr,p* scanf,snprintf&#include &string.h& //str* mem* b* index rindex,srechr&#include &time.h& //time,ctime,gmtime,localtime asctime#include &ctype.h& // isalpha,isdigit,islower,isupper isalnum#include &assert.h&#include &errno.h&#include &sys/time.h& // time,ctime,ftime,settimeofday gettimeofday |timeval timezone#include &sys/resource.h&& //getpriority setpriority#include &sys/types.h&#include &sys/stat.h& //stat fstat lstat#include &sys/wait.h& //wait waitpid,fork#include &sys/socket.h& // socket,bind,listen,connect accept#include &sys/mman.h& & // munmap,open mmap#include &inttypes.h& // &uint8_t uint16_t uint32_t#include &pthread.h&#include &math.h& //asin , atan , atan2 , cos , sin , tan acos#include &dirent.h& // scandir,qsort alphasort#include &signal.h& // raise,signal kill#include&stdarg.h& //vfprintf printf,fscanf,fprintf#include&utmp.h& & //utmpname getutent,getutid,getutline,setutent#include&pwd.h& // getpwent,endpwent#include&grp.h& & //fgetgrent,getgrent,getgrnam#include&fcntl.h& //fcntl dup2(2), flock(2), open(2), socket(2), lockf(3)#include&netdb.h& //getservent,getservbyname,getservbyport,endservent#include&netinet/in.h& //htons,ntohl,ntohs htonl#include&arpa/inet.h& //inet_addr,inet_aton inet_ntoa///////////////////////////////////////////////////////////////////////////////////////////////////////【转载】/hummersofdie/p/3727703.html#include &linux/module.h& 中的module.h默认是在哪个目录下呢?我在/usr/include/linux下并没有找到这个文件。另外想问一下,不同内核版本的linux头文件是不是一样的。比如:我在2.6.20内核的系统上,用2.6.10的头文件会不会有问题。网友回复:1我的 module.h是在 内核编译好了的目录下的,不是在/usr/include/linux下,2在2.6.20内核的系统上,用2.6.10的头文件应该会有问题,内核的头文件和 当前系统运行的内核不一致。网友回复:你引用的是内核下的头文件.不在/usr/include下.在: /usr/src/kernels/2.6.18-8.el5-x86_64/include/linux/module.h 下面... 中间的版本号是不一样的...你选你的就行了..网友回复:请问楼上为什么是在/usr/src/kernels/2.6.18-8.el5-x86_64/include/linux/module.h呢?我查了一下环境变量,没有看到关于头文件的环境变量。gcc是如何知道头文件的位置的?网友回复:这个问题很好,你需要看看linux kernel的Makefile文件了。在什么地方找头文件,它说了算。:)网友回复:你的程序是驱动之类的内核层的吧?它调用的头文件就应该是内核源码里面的include了。一般的系统都把内核源码放在/usr/src下面,假如是自己编译的内核的话,也可以放在别处的。 至于gcc到哪里去找头文件,就看makefile了,或者直接用gcc命令的话,要加上-I来指定目录。网友回复:楼上,可是我的makefile里没有指定include呀,gcc是怎么找到头文件的?网友回复:gcc是怎么找到头文件的?================================回答了这个问题,LZ就明白了一切了,GCC找头文件有三种策略:1.会在默认情况下指定到/usr/include文件夹(更深层次的是一个相对路径,GCC可执行程序的路径是/usr/bin,那么它在实际工作时指定头文件头径是一种相对路径方法,换算成绝对路径就是/usr/include)2.GCC还使用了-I指定路径的方式,这一点大家都知道3.还可以使用一个参数来指示GCC不搜索系统默认路径,这个参数我忘了,你搜一下就知道了在 编译驱动模块时,由于非凡的需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include,要自己用-I参数来指定内核头文件路径,这个 时候必须在Makefile中指定两个参数,一个是内核头文件路径,一个是强制GCC不搜索系统默认路径。在编译内核时,必须使用一个参数(强制GCC不 搜索系统默认路径),否则就会引起混乱。另,在驱动程序下面不是。下面是驱动程序的路径:(注意,这里已经预先定义好了arm平台了,所以才会自动去arm相关的底下找)驱动程序:#include &linux/***.h& 是在linux-2.6.29/include/linux下面寻找源文件。#include &asm/***.h& 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include &mach/***.h& 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include &linux/module.h&&&//最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了#include &linux/fs.h&&&//包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations#include &linux/errno.h&&&//包含了对返回&#20540;的宏定义,这样用户程序可以用perror输出错误信息。#include &linux/types.h&&&//对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,只是为了方便阅读。#include &linux/cdev.h&&&//对字符设备结构cdev以及一系列的操作函数的定义。#include &linux/wait.h&&&//等代队列相关头文件应用程序:#include &fcntl.h& //包含了open()函数的flags,mode参数的宏定义。驱动程序:&#include &linux/***.h& 是在linux-2.6.29/include/linux下面寻找源文件。#include &asm/***.h& 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include &mach/***.h& 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include &plat/regs-adc.h&在linux-2.6.31_TX0/linux-2.6.31_TX2440A/arch/arm/plat-s3c/include/plat#include &linux/module.h& //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了#include &linux/fs.h& //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//包含了struct inode 的定义,MINOR、MAJOR的头文件。#include &linux/errno.h& //包含了对返回&#20540;的宏定义,这样用户程序可以用perror输出错误信息。#include &linux/types.h& //对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,只是为了方便阅读。#include &linux/cdev.h& //对字符设备结构cdev以及一系列的操作函数的定义。//包含了cdev 结构及相关函数的定义。#include &linux/wait.h& //等代队列相关头文件//内核等待队列,它包含了自旋锁的头文件#include &linux/init.h&#include &linux/kernel.h&&&&&&&&&&&&&#include &linux/slab.h&&&&&&&&&&&&&&&//包含了kcalloc、kzalloc内存分配函数的定义。#include &linux/uaccess.h&&&&&&&&&//包含了copy_to_user、copy_from_user等内核访问用户进程内存地址的函数定义。#include &linux/device.h&&&&&&&&&&& //包含了device、class 等结构的定义#include &linux/io.h&&&&&&&&&&&&&&&&&&&//包含了ioremap、iowrite等内核访问IO内存等函数的定义。#include &linux/miscdevice.h&&&&&//包含了miscdevice结构的定义及相关的操作函数。#include &linux/interrupt.h&&&&&&&&&//使用中断必须的头文件#include &mach/irqs.h&&&&&&&&&&&&& //使用中断必须的头文件#include &asm/bitops.h&&&&&&&&&&& //包含set_bit等位操作函数,实现Input子系统时可用。#include &linux/semaphore.h&&& //使用信号量必须的头文件#include &linux/spinlock.h&&&&&&& //自旋锁#include &linux/sched.h&&&&&&&&&&&//内核等待队列中要使用的TASK_NORMAL、TASK_INTERRUPTIBLE包含在这个头文件#include &linux/kfifo.h&&&&&&&&&&&&& //fifo环形队列#include &linux/timer.h&&&&&&&&&&& //内核定时器#include &linux/input.h&&&&&&&&&&& //中断处理头文件主目录include头文件目录中总共有32个.h头文件。其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个。这些头文件各自的功能如下,具体的作用和所包含的信息请参见第14章。&a.out.h&:a.out头文件,定义了a.out执行文件&#26684;式和一些宏。&const.h&:常数符号头文件,目前仅定义了i节点中i_mode字段的各标志位。&ctype.h&:字符类型头文件,定义了一些有关字符类型判断和转换的宏。&errno.h&:错误号头文件,包含系统中各种出错号。(Linus从minix中引进的)。&fcntl.h&:文件控制头文件,用于文件及其描述符的操作控制常数符号的定义。&signal.h&:信号头文件,定义信号符号常量,信号结构以及信号操作函数原型。&stdarg.h&:标准参数头文件,以宏的形式定义变量参数列表。主要说明了一个类型(va_list)和3个宏(va_start, va_arg和va_end),用于vsprintf、vprintf、vfprintf函数。&stddef.h&:标准定义头文件,定义了NULL, offsetof(TYPE, MEMBER)。&string.h&:字符串头文件,主要定义了一些有关字符串操作的嵌入函数。&termios.h&:终端输入输出函数头文件,主要定义控制异步通信口的终端接口。&time.h&:时间类型头文件,主要定义了tm结构和一些有关时间的函数原形。&unistd.h&:Linux标准头文件,定义了各种符号常数和类型,并声明了各种函数。如,定义了__LIBRARY__,则还包括系统调用号和内嵌汇编_syscall0()等。&utime.h&:用户时间头文件,定义了访问和修改时间结构以及utime()原型。(1)体系结构相关头文件子目录include/asm这些头文件主要定义了一些与CPU体系结构密切相关的数据结构、宏函数和变量。共4个文件。&asm/io.h&:I/O头文件,以宏的嵌入汇编程序形式定义对I/O端口操作的函数。&asm/memory.h&:内存拷贝头文件,含有memcpy()嵌入式汇编宏函数。&asm/segment.h&:段操作头文件,定义了有关段寄存器操作的嵌入式汇编函数。&asm/system.h&:系统头文件,定义了设置或修改描述符/中断门等的嵌入式汇编宏。(2)Linux内核专用头文件子目录include/linux&linux/config.h&:内核配置头文件,定义键盘语言和硬盘类型(HD_TYPE)可选项。&linux/fdreg.h&:软驱头文件,含有软盘控制器参数的一些定义。&linux/fs.h&:文件系统头文件,定义文件表结构(file,buffer_head,m_inode等)。&linux/hdreg.h&:硬盘参数头文件,定义访问硬盘寄存器端口、状态码和分区表等信息。&linux/head.h&:head头文件,定义了段描述符的简单结构,和几个选择符常量。&linux/kernel.h&:内核头文件,含有一些内核常用函数的原形定义。&linux/mm.h&:内存管理头文件,含有页面大小定义和一些页面释放函数原型。&linux/sched.h&: 调度程序头文件,定义了任务结构task_struct、初始任务0的数据,以及一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。&linux/sys.h&:系统调用头文件,含有72个系统调用C函数处理程序,以&sys_&开头。&linux/tty.h&:tty头文件,定义了有关tty_io,串行通信方面的参数、常数。(3)系统专用数据结构子目录include/sys&sys/stat.h&: 文件状态头文件,含有文件或文件系统状态结构stat{}和常量。&sys/times.h&:定义了进程中运行时间结构tms以及times()函数原型。&sys/types.h&:类型头文件,定义了基本的系统数据类型。&sys/utsname.h&:系统名称结构头文件。&sys/wait.h&:等待调用头文件,定义系统调用wait()和waitpid()及相关常数符号。&
(责任编辑:联盟电脑)
更多相关资讯
1、LVS的定义? LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集.....
【联盟电脑】部分内容自于互联网,其言论不代表本站观点,若本站侵犯到您的版权,请与站长联系,我们将在第一时间核实并删除!
版权所有 & 【联盟电脑】 | 专注分享有价值、实用的电脑技术和知识
Copyright &
All rights reserved. 京ICP备号Set&Integer& set=new HashSet&Integer&();
(int i=0;i&3;i++){
set.add(i);
for(Iterator&Integer& ite=set.iterator();ite.hasNext();){
.out.println(arr[ite]);
}arr[]是一个数组,这行总报错,要我把Iterator&Integer&转换为int型,这个怎么转啊
--------------------------------------
Integer n = ite.next();int m = n.intValue();
--------------------------------------
的回复:Integer n = ite.next();int m = n.intValue();+1lz Iterator的用法要搞清楚啊1.print语句输出和交互式解释器输出的不同在下面的例子中,我们把一个字符串赋&#20540;给变量myString,先用print 来显示变量的内容,之后用变量名称来显示。&&& myString = 'Hello World!'&&& print myStringHello World!&&& myString'Hello World!'注意:在仅用变量名时,输出的字符串是被用单引号括起来了的。这是为了让非字符串对象也能以字符串的方式显示在屏幕上--即它显示的是该对象的字符串表示,而不仅仅是字符串本身。引号表示你刚刚输入的变量的&#20540;是一个字符串。等你对Python 有了较深入的了解之后,你就知道print 语句调用str()函数显示对象,而交互式解释器则调用repr()函数来显示对象。2.下划线(_)在解释器中有特别的含义,表示最后一个表达式的&#20540;&&& _Hello World!3.print语句中使用百分号%&&& print &%s is number %d!& % (&Python&, 1)Python is number 1!%s 表示由一个字符串来替换,而%d 表示由一个整数来替换,另外一个很常用的就是%f, 它表示由一个浮点数来替换4.使用符号&&用来重定向输出下面这个例子将输出重定向到标准错误输出:import sysprint && sys.stderr, 'Fatal error: invalid input!'下面是一个将输出重定向到日志文件的例子:logfile = open('/tmp/mylog.txt', 'a')print && logfile, 'Fatal error: invalid input!'logfile.close()5.使用raw_input()进行输入,使用int()函数进行转换&&& user = raw_input('Enter login name: ')Enter login name: root&&& print 'Your login is:', userYour login is: root上面这个例子只能用于文本输入。 下面是输入一个数&#20540;字符串(并将字符串转换为整数)的例子:&&& num = raw_input('Now enter a number: ')Now enter a number: 1024&&& print 'Doubling your number: %d' % (int(num) * 2)Doubling your number: 20486.使用help函数获取帮助&&& help(raw_input)Help on built-in function raw_input in module __builtin__:raw_input(...)raw_input([prompt]) -& string7.python注释7.1行注释:&&& # one comment... print 'Hello World!' # another commentHello World!7.2 文档注释def foo():&This is a doc string.&return True与普通注释不同,文档字符串可以在运行时访问,也可以用来自动生成文档。8.python的两种除法Python 有两种除法运算符,单斜杠用作传统除法,双斜杠用作浮点除法(对结果进行四舍五入)。传统除法是指如果两个操作数都是整数的话,它将执行是地板除(取比商小的最大整数),而浮点除法是真正的除法,不管操作数是什么类型,浮点除法总是执行真正的除法。9.Python 不支持C 语言中的自增1 和自减1 运算符&这是因为 &#43; 和 - 也是单目运算符,Python 会将 --n 解释为-(-n) 从而得到 n , 同样 &#43;&#43;n 的结果也是 n.10.python的数字类型11.python字符串Python 中字符串被定义为引号之间的字符集合。Python 支持使用成对的单引号或双引号,三引号(三个连续的单引号或者双引号)可以用来包含特殊字符。使用索引运算符( [ ] )和切片运算符( [ : ] )可以得到子字符串。字符串有其特有的索引规则:第一个字符的索引是 0,最后一个字符的索引是 -1加号( &#43; )用于字符串连接运算,星号( * )则用于字符串重复。下面是几个例子:&&& pystr = 'Python'&&& iscool = 'is cool!'&&& pystr[0]'P'&&& pystr[2:5]'tho'&&& iscool[:2]'is'&&& iscool[3:]'cool!'&&& iscool[-1]'!'&&& pystr &#43; iscool'Pythonis cool!'&&& pystr &#43; ' ' &#43; iscool'Python is cool!'&&& pystr * 2'PythonPython'&&& '-' * 20'--------------------'&&& pystr = '''python... is cool'''&&& pystr'python/nis cool'&&& print pystrpythonis cool&#65279;&#65279;}

我要回帖

更多关于 makefile 生成so 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信