首页>计算机>Linux认证>学习教程>正文
Linux平台Makefile文件的编写基础篇

www.zige365.com 2008-8-19 15:36:40 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
上一层楼:使用变量

  上面提到一句,如果要编译cpp文件,只要把gcc改成g++就行了。但如果Makefile中有很多gcc,那不就很麻烦了。

               第二个例子:

               === makefile 开始 ===
                      OBJS = file1.o file2.o
                      CC = gcc
                      CFLAGS = -Wall -O -g

                      helloworld : $(OBJS)
                             $(CC) $(OBJS) -o helloworld

                      file1.o : file1.c file2.h
                             $(CC) $(CFLAGS) -c file1.c -o file1.o

                      file2.o : file2.c file2.h
                             $(CC) $(CFLAGS) -c file2.c -o file2.o

                      clean:

                             rm -rf *.o helloworld
        === makefile 结束 ===

  这里我们应用到了变量。要设定一个变量,你只要在一行的开始写下这个变量的名字,后 面跟一个 = 号,后面跟你要设定的这个变量的值。以后你要引用 这个变量,写一个 $ 符号,后面是围在括号里的变量名。

 

        CFLAGS = -Wall -O –g,解释一下。这是配置编译器设置,并把它赋值给CFFLAGS变量。

        -Wall:          输出所有的警告信息。

        -O:              在编译时进行优化。

        -g:               表示编译debug版本。

  这样写的Makefile文件比较简单,但很容易就会发现缺点,那就是要列出所有的c文件。如果你添加一个c文件,那就需要修改Makefile文件,这在项目开发中还是比较麻烦的。

        再上一层楼:使用函数

  学到这里,你也许会说,这就好像编程序吗?有变量,也有函数。其实这就是编程序,只不过用的语言不同而已。

               第三个例子:

               === makefile 开始 ===
                      CC = gcc

                      XX = g++
                      CFLAGS = -Wall -O –g

                      TARGET = ./helloworld

                      %.o: %.c

                             $(CC) $(CFLAGS) -c $< -o $@

                      %.o:%.cpp

                             $(XX) $(CFLAGS) -c $< -o $@

                      SOURCES = $(wildcard *.c *.cpp)
                      OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))

                      $(TARGET) : $(OBJS)
                             $(XX) $(OBJS) -o $(TARGET)

                             chmod a+x $(TARGET)

        clean:

               rm -rf *.o helloworld
        === makefile 结束 ===

        函数1:wildcard

  产生一个所有以 '.c' 结尾的文件的列表。

  SOURCES = $(wildcard *.c *.cpp)表示产生一个所有以 .c,.cpp结尾的文件的列表,然后存入变量 SOURCES 里。

本新闻共4页,当前在第3页  1  2  3  4  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
红旗linux认证工程师考题系统部份(3)
Wine让Windows上的软件集体移民
Linux启动过程全接触
LinuxDNS的负载均衡及子域委派
用chkconfig轻松管理启动程序
如何设置Ubuntu做网关