Makefile 通配符

Makefile中表示一个文件名时,可以使用通配符。在Makefile中可以使用的通配符有:* 、? 、 […]。通配符的使用方法和含义和在shell中一样。比如:*.c 表示当前目录下所有以“.c”结尾的文件。除此之外,Makefile还有经常使用的几个自动变量也可以看做特殊通配符:

  • $@:所有目标文件
  • $^:目标依赖的所有文件
  • $<:第一个依赖文件
  • $?:所有更新过的依赖文件

Makefile中,通配符主要用在两个场合:

  • 用在规则的目标和依赖中:make在读取Makefile时会自动对其进行匹配处理(通配符展开)。如:

    test: *.o
        gcc -o $@ $^
    
    *.o: *.c
        gcc -c $^
    
  • 用在规则的命令中:通配符的通配处理在shell执行命令时完成。如:

    clean:
        rm -f *.o
    

除了以上两种情况,在其他地方都不能直接使用通配符。需要一些函数(如wildcard)来实现。如果想列举当前目录下的所有C文件,可以直接使用wildcard函数:

$(wildcard *.c)

波浪线 ~

在Linux系统中,波浪线表示HOME目录,以波浪线表示的文件名也表示特殊的含义。以我当前使用的Ubuntu为例,登录用户名为wit,则

  • ~:表示/home/wit这个目录
  • ~/.bashrc:表示/home/wit/.bashrc文件
  • ~wit:表示用户wit的HOME目录,即/home/wit
  • ~root:表示用户root的HOME目录,即/root
  • ~wit/.bashrc:表示/home/wit/.bashrc文件
  • ~root/.bashrc:表示/root/.bashrc文件
《Makefile工程实践》视频教程,一线开发工程师独家录制,网上首家讲解Makefile的实战课程。从零开始,教你一步一步编写一个工程项目的Makefile,支持使用第三方静态库、动态库,支持指定模块或目录编译生成静态库、动态库,赠送企业级的Makefile模板,学完即可拿来使用,投入项目开发实战,具备独立开展项目开发和管理的能力。详情请点击淘宝链接:Linux三剑客