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

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!

参考资料来源:夏曹俊

posted @ 2024-08-10 16:12  CodeMagicianT  阅读(10)  评论(0编辑  收藏  举报