首页 > 其他分享 >3.makefile运行流程分析并使用变量改写项目

3.makefile运行流程分析并使用变量改写项目

时间:2024-08-10 16:17:30浏览次数:14  
标签:TARGET 流程 makefile 改写 build cpp cmt make first

3.makefile运行流程分析并使用变量改写项目

  • GNU make用来构建和管理自己的工程
  • Makefile 文件描述了整个工程的编译、连接等规则

3.1makefile变量的使用

命令格式 含义
CXX C++编译器的名称,默认值为g++
CXXFLAGS C++编译器的选项,无默认值
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并出现的先后序,可能包含重复的依赖文件
$< 第一个依赖文件的名称
$? 所有时间戳比目标文件晚的依赖文件,并以空格分开
$@ 目标文件的完整名称
$^ 所有不重复的依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称

版本1:

#first_make

first_make:first_make.cpp xdata.cpp
        g++ first_make.cpp xdata.cpp - o first_make - lpthread

版本2:

#first_make

first_make:first_make.cpp xdata.cpp
        $(CXX) first_make.cpp xdata.cpp - o first_make - lpthread

版本3:

#first_make
# $^ 依赖 不重复
# $@ 目标
first_make:first_make.cpp xdata.cpp
        $(CXX) $^ -o $@ - lpthread

版本4:

# first_make
# $^ 依赖 不重复
# $@ 目标
TARGET=first_make
 
$(TARGET):first_make.cpp xdata.cpp
        $(CXX) $^ -o $@ -lpthread
        echo "build success!"
root@cmt-virtual-machine:/home/cmt/src/first_make# ls
first_make.cpp  makefile  xdata.cpp  xdata.h
root@cmt-virtual-machine:/home/cmt/src/first_make# make
g++ first_make.cpp xdata.cpp -o first_make -lpthread
echo "build success!"
build success!
root@cmt-virtual-machine:/home/cmt/src/first_make# 

echo "build success!" 是一个简单的命令,用于在终端上输出文本 "build success!"。在这个上下文中,它的作用是向用户提示编译过程已经成功完成。具体来说:

  • 输出消息echo 是一个常见的 shell 命令,用于在终端中输出一段文本。这里的文本是 "build success!"
  • 通知用户:当编译和链接过程完成后,make 运行了 echo 命令,以便在终端中打印一条消息,告诉用户构建过程已经成功结束。

版本5:

# first_make
# $^ 依赖 不重复
# $@ 目标
TARGET=first_make

$(TARGET):first_make.cpp xdata.cpp
        echo "begin build $(TARGET)"
        $(CXX) $^ -o $@ -lpthread
        echo "$(TARGET) build success!"
root@cmt-virtual-machine:/home/cmt/src/first_make# ls
first_make.cpp  makefile  xdata.cpp  xdata.h
root@cmt-virtual-machine:/home/cmt/src/first_make# make
echo "begin build first_make"
begin build first_make
g++ first_make.cpp xdata.cpp -o first_make -lpthread
echo "first_make build success!"
first_make build success!
# first_make
# $^ 依赖 不重复
# $@ 目标
# @ 不显示命令执行
TARGET=first_make

$(TARGET):first_make.cpp xdata.cpp
        @echo "begin build $(TARGET)"
        @$(CXX) $^ -o $@ -lpthread
        @echo "$(TARGET) build success!"
root@cmt-virtual-machine:/home/cmt/src/first_make# make
begin build first_make
first_make build success!

版本6:执行一段代码有可能失败

# first_make
# $^ 依赖 不重复
# $@ 目标
# @ 不显示命令执行
TARGET=first_make

$(TARGET):first_make.cpp xdata.cpp
        rm test
        @echo "begin build $(TARGET)"
        @$(CXX) $^ -o $@ -lpthread
        @echo "$(TARGET) build success!"
root@cmt-virtual-machine:/home/cmt/src/first_make# make
rm test
rm: 无法删除 'test': 没有那个文件或目录
make: *** [makefile:8:first_make] 错误 1
root@cmt-virtual-machine:/home/cmt/src/first_make# 

失败后后面的代码不执行。

我们希望失败后,继续执行后面的代码

# first_make
# $^ 依赖 不重复
# $@ 目标
# @ 不显示命令执行 -失败不停止
TARGET=first_make
LIBS=-lpthread
$(TARGET):first_make.cpp xdata.cpp
        @#-rm test
        @echo "begin build $(TARGET)"
        @$(CXX) $^ -o $@ $(LIBS)
        @echo "$(TARGET) build success!"
root@cmt-virtual-machine:/home/cmt/src/first_make# make
begin build first_make
first_make build success!

参考资料来源:夏曹俊

标签:TARGET,流程,makefile,改写,build,cpp,cmt,make,first
From: https://www.cnblogs.com/codemagiciant/p/18352406

相关文章

  • 1.动手编写第一个makefile编译c++多文件项目
    1.动手编写第一个makefile编译c++多文件项目1.1ubuntu开发环境安装•apt-getupdate#更新安装源•apt-getinstallg++#安装gcc和c++的开发库•apt-getinstallgdb#调试工具•apt-getinstallmake•apt-getinstallopenssh-server#远程连接工具•apt-getin......
  • spring启动流程
    ` publicvoidrefresh()throwsBeansException,IllegalStateException{this.startupShutdownLock.lock();try{//启动关闭线程,这个线程用来表示启动当前容器使用的线程//该成员变量在之前的版本中并不存在,也是为了支持后续的并发实例化bean的情况this.startupShutdown......
  • java流程控制之顺序结构
    java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。顺序结构是最简单的算法结构。语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一种算法都离不开的一种基本算法结构由于我idea使用过期,目前还没......
  • Linux项目自动构建工具 make/makefile
    目录0.前言1.make/makefile是什么2.makefile的语法2.1基本语法2.2依赖关系2.3.示例:一个简单的C程序3.使用指令自动构建与清除3.1自动构建3.2自动清除3.3自动化工作流3.4扩展:更多伪目标4.make的工作原理5.使用make/makefile的优势6.小结(图像由AI生成)0.前......
  • 用Python打造精彩动画与视频,9.2 从概念到成品的完整工作流程
     第九章:综合项目9.2从概念到成品的完整工作流程在前面的章节中,我们深入探讨了各种Python技术及其在动画与视频制作中的应用。在本章中,我们将综合运用这些技术,完成一个完整的项目——从初步概念到最终成品的工作流程。这一流程不仅包括技术实现,还涉及规划、设计、测试和发布......
  • Makefile 常见的错误信息
    1、常见的错误信息make执行过程中所产生错误并不都是致命的,特别是在命令行之前存在-、或者make使用-k选项执行时。make执行过程的致命错误都带有前缀字符串***。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是make);另外一种是当Makefile本身存在语法错误无法被......
  • React原理之React整体渲染流程
    前置知识:深度优先搜索(DFS)、Fiber节点在上一篇React原理篇之React整体架构解读中,提到了Fiber架构中的几个核心概念:Scheduler(调度器):根据任务的优先级安排任务执行顺序。Reconciler(协调器):根据新旧虚拟DOM树的差异确定需要更新的部分。Renderer(渲染器):将更新的虚拟......
  • vue2 bpmnjs流程图
    原作者gitee地址:gitclonehttps://gitee.com/cjy2353/best-vue-bpmnjs.git"bpmn-js":"^17.9.2","vue":"^2.6.11",node-v"v14.17.6"使用:`importBpmnfrom'com/Bpmn'components:{Bpmn,},`bpmn组件如下:......
  • 团体标准制定与发布有哪些流程?需要满足什么条件?
    百问百答 ▷▷▷Q&A标准化知识问答第3期 »»»»团体标准的制定与发布前言|在上一期的内容中,我们介绍了团体标准的原则和价值,今天,我们接着向下,了解团体标准的制定与发布。团体标准的制定与发布是一个涉及多方参与和复杂程序的过程。通过本期内容,我们将揭示这一过程的......
  • 【面试高频,必知必会】OpenGL渲染流程
    ......