初步的认识Makefile

文章目录

  • 一、什么是Makefile
  • 二、Makefile的相关知识点
  • 三、Makefile实例
  • 四、总结

一、什么是Makefile

       Makefile是通过制定一些规则,对文件进行编译的方法。将各个源文件利用make工具编译成可以执行的文件,编译的规则则是根据Makefile文件。

二、Makefile的相关知识点

  1. Makefile宏
    使用方法是采用等号(=)表示对一个Makefile定义的宏
    示例:

MACROS= -me
PSROFF= groff -Tps
CC= gcc

特殊的宏:
$@----表示当前目标文件的名字
$^----表示所有的依赖文件
$<----表示第一个依赖文件
  1. Makefile定义的依赖性
    执行文件将依赖于各种源代码和源代码的头文件。
    示例:

hello: main.o factorial.o hello.o
$(CC) main.o factorial.o hello.o -o hello

  1. Makefile的定义规则
    makefile语法:
    target表示目标文件,dependent表示依赖文件

target [target…] : [dependent …]
[ command …]
实例:
hello: main.o factorial.o hello.o
$(CC) main.o factorial.o hello.o -o hello

  1. Makefile指令
  • 条件指令
    ifeq指令开始的条件,指定的条件。包含两个参数,服从两个参数的匹配,否则会被忽略。
    ifneq指令开始的条件,指定的条件。包含两个参数,服从两个参数的不匹配,否则会被忽略。
    ifdef 指令开始的条件,指定的条件。它包含单参数。如果给定的参数为真,则条件为真。
    ifndef 指令开始的条件,指定的条件。它包含单参数。如果给定的是假的,那么条件为真。
    else 指令会导致以下行如果前面的条件未能被遵守。它是可选的,在有条件有一个else。
    endif 指令结束条件。每一个条件必须与endif结束。
    示例:
libs_for_gcc = -lgnu
normal_libs =foo: $(objects)

ifeq ($(CC),gcc)
       $(CC) -o foo $(objects) $(libs_for_gcc)
else
      $(CC) -o foo $(objects) $(normal_libs)
endif
  • include指令
    include指令作用是让make暂停读取当前makefile文件和读取一个或多个其它的makefile,然后再继续。
    示例:
include foo *.mk $(bar)
is equivalent to
include foo a.mk b.mk c.mk bish bash
  • override指令
    override指令是设置makefile的变量,即使它被设置的命令参数。
    示例:
override variable = value
or
override variable := value

三、Makefile实例

CC=gcc
objects=scr/main.o scr/sub1.o
target=main

$(target):$(objects)
	$(CC) -o $(target) $(objects)

scr/main.o:scr/main.c
	$(CC) -o $@ -c $<

scr/sub1.o:scr/sub1.c
	$(CC) -o $@ -c $<

clean:
	rm -rf $(objects) $(target)

四、总结

      使用Makefile的原因是由于一个项目存在较多的源程序的时候,采用gcc的方式可能存在错误,无法准确判断编译的次序。采用Makefile就可以避免这种情况,使编译更加有条理性。

你可能感兴趣的:(初步的认识Makefile)