-c代表编译,-o代表链接
-o代表指定输出文件名
-c只编译,无连接(g++ main.cpp -c)
编写makefile便于在多个文件的情况下,去编译连接多个代码文件。将需要重复执行的编译执行操作写在文件中,每次执行程序时,调用该makefile文件即可。
makefile文件的编写:
通过makefile文件执行过程:
每次编译之后,都会生成.o文件。可以在makefile文件的编写过程中,加入编译之后删除.o文件的操作。
下图为运行makefile文件之后,文件夹的变化:
makefile文件的编写:相应规则,start,clean等为标号,必须写,方便后期makefile文件按照标号分类执行。
其次,标号里的内容,与标号的间隔,为一个tab
执行带标号的文件,make +标号名。
例如此makefile文件里有两个标号,start和clean,
则在执行时,输入make start和make clean
如果写成以上,就成为一个简单的批处理,没有价值。
定义变量,makefile里面的变量没有类型,只是定义一个变量。makefile变量习惯写成大写
变量定义:CC=g++;
在使用变量时:$(变量)
makefile的依赖:
start:后面的 a.o 和main.o为makefile该文件的依赖。
执行顺序:执行到start之后,遇到a.o和main.o
会先去找,是否有a.o: 和main.o:,如果有就先执行a.o: 和main.o:下面的语句,只有当这两个语句执行之后,a.o和main.o才生成,生成之后,才能执行 :$(CC) -o myapp a.o main.o语句
工作中的书写
整个程序依赖于a.o main.o
①:缺省a.o,
跳转到:.cpp.o:执行$(CC) -o $a.o -c $a.cpp
②:缺省main.o
跳转到: .cpp.o:执行$(CC) -o $main.o -c $main.cpp
再次优化:
也就是利用SRCS,OBJS,EXEC等变量名,通过$(变量名)这一操作实现对变量名内多个文件循环操作。
make是根据.cpp和.o文件的最后修改日期判断cpp文件是否需要编译。如果.o文件不存在,make会失去判断条件,那么一定会编译cpp文件。
make不关注.h文件,.h文件属于os关心的。