首页 > 其他分享 >makefile

makefile

时间:2023-04-29 23:00:42浏览次数:29  
标签:obj sub int sum makefile CC main

make

make是个命令,是个可执行程序,用来解析Makefile文件的命令

makefile

makefile 是个文件,这个文件中描述了咱们程序的编译规则

makefile语法规则

目标:依赖文件列表
<Tab>命令列表

make命令格式

make [ ‐f file ] [ targets ]

Makefile案例

sum.c

#include "head.h"
int sum(int a, int b) {
  return a + b;
}

sub.c

#include "head.h"
int sub(int a, int b) {
  return a ‐ b;
}

head.h

#ifndef _HEAD_H_
#define _HEAD_H_
#include <stdio.h>
int sum(int a, int b);
int sub(int a, int b);
#endif

Makefile

main:main.o sub.o sum.o
  gcc main.o sub.o sum.o ‐o main
main.o:main.c
  gcc ‐c main.c ‐o main.o
sub.o:sub.c
  gcc ‐c sub.c ‐o sub.o
sum.o:sum.c
  gcc ‐c sum.c ‐o sum.o
clean:
  rm *.o main a.out ‐rf

预定义变量

makefile中有许多预定义变量,这些变量具有特殊的含义,可在makefile中直接使用。

$@       目标名
$<       依赖文件列表中的第一个文件
$^       依赖文件列表中除去重复文件的部分
AR       归档维护程序的程序名,默认值为ar
ARFLAGS  归档维护程序的选项
AS       汇编程序的名称,默认值为as
ASFLAGS  汇编程序的选项
CC       C编译器的名称,默认值为cc
CFLAGS   C编译器的选项
CPP      C预编译器的名称,默认值为$(CC) -E
CPPFLAGS C预编译的选项
CXX      C++编译器的名称,默认值为g++
CXXFLAGS C++编译器的选项
CC=gcc
obj=main
obj1=sub
obj2=sum
OBJ=main.o sub.o sum.o
CFLAGS=‐Wall ‐g
$(obj):$(OBJ)
  $(CC) $^ ‐o $@

$(obj).o:$(obj).c
  $(CC) $(CFLAGS) ‐c $< ‐o $@
$(obj1).o:$(obj1).c
  $(CC) $(CFLAGS) ‐c $< ‐o $@
$(obj2).o:$(obj2).c
  $(CC) $(CFLAGS) ‐c $< ‐o $@
clean:
  rm *.o $(obj) a.out ‐rf

精简版

CC=gcc
obj=main
OBJ=main.o sub.o sum.o
CFLAGS=‐Wall ‐g
$(obj):$(OBJ)
  $(CC) $^ ‐o $@
%*.o:%*.c
  $(CC) $(CFLAGS) ‐c $< ‐o $@
clean:
  rm *.o $(obj) a.out ‐rf

标签:obj,sub,int,sum,makefile,CC,main
From: https://www.cnblogs.com/tian0926/p/17364610.html

相关文章

  • “makefile:425: *** 遗漏分隔符 。 停止。”问题解决
    在终端下输入make时出现“makefile:2:***遗漏分隔符。停止。”问题,原因是在编写makefile文件时:3:3.c        gcc-o33.cgcc前的是tab分隔符,不能用空格,否则会出现“makefile:2:***遗漏分隔符。停止。”提示。。。make中规定每一Shell命令之前的开头必须使用<t......
  • Makefile 只修改了.h头文件,编译为什么不起作用?
    M,-MM,-MMD,-MF,-MT区别https://programmer.group/gcc-m-mm-mmd-mf-mt.htmlRef加-MMD选项解决头文件编译生效https://cloud.tencent.com/developer/article/1837814gcc预处理选项https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html......
  • makefile 通用模板
    ##Makefile##⭐全速编译命令:makeclean&&make-j$(nproc)#:=就地解析赋值=最后一次赋值?=未赋值时赋值+=接续赋值#mount-tnfs-onolock,vers=3192.168.5.12:/home/book/nfs_rootfs/mnt&&ps-ef|grepjc|grep-vgrep|awk'{print$1}'|xa......
  • Makefile.am
    在automake的Makefile文件中,指定编译类库或者bin文件的路径时,由于需要加载的目录比较多,可能会换行,换行的内容需要在末尾增加反斜杠\,但是要注意,反斜杠后面不可以跟任何空格字符,如果有,会导致该条目出错,就是对应的编译的类库或者bin,无法正常编译,也不会报错。反斜杠后跟空格,在文本中不......
  • Makefile基本规则
    原文连接:(1054条消息)跟我一起写Makefile(一)_《跟我一起写makefile》_haoel的博客-CSDN博客Makefile基本规则target:prerequisites command一个简单例子edit:main.okbd.ocommand.odisplay.o/insert.osearch.ofiles.outils.o cc-oeditmain.okbd.oc......
  • 【Linux】项目自动化构建工具-make/Makefile的使用
    目录前言依赖依赖关系依赖方法使用项目清理前言......
  • Makefile知识点-3------makefile定义“空格”变量的定义方法
    下面再介绍两个定义变量时我们需要知道的,请先看一个例子,如果我们要定义一个变量,其值是一个空格,那么我们可以这样来:nullstring:=space:=$(nullstring)#endofthelinenullstring是一个Empty变量,其中什么也没有,而我们的space的值是一个空格。因为在操作符的右边是很难描述......
  • 刚开始如何模仿写C/C++程序的Makefile
    对于一般工程的C/C++程序,在利用Makefile文件对其进行编译遵守下面两个规则即可:即编写的Makefile文件中,不论最后的是库文件还是可执行文件。gcc通过-c选项,将所有的文件都编译成目标代码文件即可.o文件。之后通过将所有的.o文件链表得到一个可执行文件,或者库文件。......
  • Makefile脚本
    1.3.1sim路径下makefile文件3.2sim路径下filelist.f列出编译需要的全部rtl和tb文件//rtlfiles../rtl/f_div.v//tbfiles../tb/main.v......
  • makefile使用总结--规则
    本文参考《跟我一起写Makefile》编写,并做了一些适合个人习惯的修改,稍加总结而成。 一篇文章肯定不够详细记录makefile所有的知识,所以这篇接着描述Makefile的规则。规则包含两个部分,一个是依赖关系,一个是生成目标的方法。在Makefile中,规则的顺序是很重要的,因为,Makefile中只应......