c_c++ 通用 makefile

c_c++ 通用 makefile

ID:6320762

大小:50.00 KB

页数:9页

时间:2018-01-10

c_c++ 通用 makefile_第1页
c_c++ 通用 makefile_第2页
c_c++ 通用 makefile_第3页
c_c++ 通用 makefile_第4页
c_c++ 通用 makefile_第5页
资源描述:

《c_c++ 通用 makefile》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C/C++通用MakefileGenericMakefileforC/C++Program==================================================Keywords:Makefile,make,Generic,C/C++Author: whyglinux(whyglinuxAThotmailDOTcom)Date:  2006-03-04==================================================本文提供了一个用于对C/C++程序进行编译和连接以产生可执行程序的通用Makefile。在使用Mak

2、efile之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动Makefile。因此,即便是一个没有学习过Makefile书写规则的人,也可以为自己的C/C++程序快速建立一个可工作的Makefile。这个Makefile可以在GNUMake和GCC编译器下正常工作。但是不能保证对于其它版本的Make和编译器也能正常工作。如果你发现了本文中的错误,或者对本文有什么感想或建议,可通过whyglinuxAThotmailDOTcom邮箱和作者联系。此Makefile的使用方法如下:1.程序目录的组织尽量将自己的源程序集中在一个目录中,

3、并且把Makefile和源程序放在一起,这样用起来比较方便。当然,也可以将源程序分类存放在不同的目录中。在程序目录中创建一个名为Makefile的文本文件,将后面列出的Makefile的内容复制到这个文件中。(注意:在复制的过程中,Makfile中各命令前面的Tab字符有可能被转换成若干个空格。这种情况下需要把Makefile命令前面的这些空格替换为一个Tab。)将当前工作目录切换到Makefile所在的目录。目前,这个Makefile只支持在当前目录中的调用,不支持当前目录和Makefile所在的路径不是同一目录的情况。2.指定可执行文件程序编译和连接成功后产生的可执行文件

4、在Makefile中的PROGRAM变量中设定。这一项不能为空。为自己程序的可执行文件起一个有意义的名子吧。3.指定源程序要编译的源程序由其所在的路径和文件的扩展名两项来确定。由于头文件是通过包含来使用的,所以在这里说的源程序不应包含头文件。程序所在的路径在SRCDIRS中设定。如果源程序分布在不同的目录中,那么需要在SRCDIRS中一一指定,并且路径名之间用空格分隔。在SRCEXTS中指定程序中使用的文件类型。C/C++程序的扩展名一般有比较固定的几种形式:.c、.C、.cc、.cpp、.CPP、.c++、.cp、或者.cxx(参见mangcc)。扩展名决定了程序是C还是C

5、++程序:.c是C程序,其它扩展名表示C++程序。一般固定使用其中的一种扩展名即可。但是也有可能需要使用多种扩展名,这可以在SOURCE_EXT中一一指定,各个扩展名之间用空格分隔。虽然并不常用,但是C程序也可以被作为C++程序编译。这可以通过在Makefile中设置CC=$(CXX)和CFLAGS=$(CXXFLAGS)两项即可实现。这个Makefile支持C、C++以及C/C++混合三种编译方式:o如果只指定.c扩展名,那么这是一个C程序,用$(CC)表示的编译命令进行编译和连接。o如果指定的是除.c之外的其它扩展名(如.cc、.cpp、.cxx等),那么这是一个C++程

6、序,用$(CXX)进行编译和连接。o如果既指定了.c,又指定了其它C++扩展名,那么这是C/C++混合程序,将用$(CC)编译其中的C程序,用$(CXX)编译其中的C++程序,最后再用$(CXX)连接程序。这些工作都是make根据在Makefile中提供的程序文件类型(扩展名)自动判断进行的,不需要用户干预。2.指定编译选项编译选项由三部分组成:预处理选项、编译选项以及连接选项,分别由CPPFLAGS、CFLAGS与CXXFLAGS、LDFLAGS指定。CPPFLAGS选项可参考C预处理命令cpp的说明,但是注意不能包含-M以及和-M有关的选项。如果是C/C++混合编程,也可

7、以在这里设置C/C++的一些共同的编译选项。CFLAGS和CXXFLAGS两个变量通常用来指定编译选项。前者仅仅用于指定C程序的编译选项,后者仅仅用于指定C++程序的编译选项。其实也可以在两个变量中指定一些预处理选项(即一些本来应该放在CPPFLAGS中的选项),和CPPFLAGS并没有明确的界限。连接选项在LDFLAGS中指定。如果只使用C/C++标准库,一般没有必要设置。如果使用了非标准库,应该在这里指定连接需要的选项,如库所在的路径、库名以及其它联接选项。现在的库一般都提供了一个相应的.pc文件来

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。