- 1:makefile的简介
- 1.1:all:
- 1.2:main:main.cpp
- 1.3:gcc -o main main.cpp
- 1.4:clean:
- 1.5:执行make命令
- 2:makefile文件中的变量
- 2.1:变量的定义
在软件工程中的源代码文件很多,按照类型、功能、模块放在若干个目录中,哪些文件需要编译,哪些文件需要后编译,哪些文件需要重新编译,就有了编译的工具。
在linux和unix中,有一个强大的编译工具make,可以用它来管理多模块程序的编译和连接,直到生成可执行文件。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
makefile的简介
make命令执行时,需要一个makefile文件,以告诉make命令需要怎么样的去编译和链接程序。假如现在需要通过gcc命令编译两个cpp文件,在项目目录下创建makefile文件:
all: main main2
main:main.cpp
gcc -o main main.cpp
mv main bin/.
main2:main2.cpp
gcc -o main2 main2.cpp
mv main2 bin/.
clean:
rm -rf bin/main bin/main2
all:
表示需要编译目标程序的清单,中间用空格隔开
main:main.cpp
main相当于标签,后面为依赖的文件。表示编译main需要依赖的文件为main.cpp,当main.cpp的内容发生了变化后,执行make会重新编译main。
gcc -o main main.cpp
和下一行的一样是cmd命令,前面是tab符号。表示将其编译为可执行文件后,移动到bin目录下。
clean:
clean标签,表示执行下面的命令来删除之前编译完成的可执行文件。
执行make命令
在编辑完makefile文件后,执行make命令,就会执行all标签对应的2个标签。
还可以执行其中单独的标签:
make clean
make main
会执行clean和main标签下对应的命令。
makefile文件中的变量
在makefile中,变量就是一个名字,变量的值就是一个文本字符串。在makefile中的目标,依赖,命令或其他地方引用变量时,变量就会被它的值替代。
变量的定义
变量的定义为 :变量名=值,在其他地方引用使用$(变量名)来进行引用。
CC=GCC
如之前的例子可以改成:
#定义变量CC和FLAG
CC=gcc
FLAG=-o
all: main main2
main:main.cpp
$(CC) $(FLAG) main main.cpp
mv main bin/.
main2:main2.cpp
$(CC) $(FLAG) main2 main2.cpp
mv main2 bin/.
clean:
rm -rf bin/main bin/main2