小金县建设局网站,网络营销策划心得体会,网站商城建设方案,合肥网站建设新浪营销目录
make/Makefile概念和关系
make/Makefie的使用 一个工程中的源文件不计数#xff0c;其按类型、功能、模块分别放在若干个目录中#xff0c;makefile定义了一系列的规则来指定#xff0c;哪些文件需要先编译#xff0c;哪些文件需要后编译#xff0c;哪些文件需要重…目录
make/Makefile概念和关系
make/Makefie的使用 一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作 makefile 带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。
make/Makefile概念和关系
make是一条命令makefile是一个文件在当前源代码路径下。
makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译的工具。
依赖关系就像是你学生时代和你爸的关系你依赖于你爸生活但是makefile在使用时不能只表明依赖关系你打电话给你爸说你是他儿子然后就把电话挂掉了你爸也很懵逼不知道你要干啥你打电话给你爸说你是他儿子依赖关系然后应该表明你要干啥依赖方法比如你要你爸给你打生活费打生活费这个行为就是一个依赖方法只有依赖关系和依赖方法同时具备才能做成一件事情才能从你爸那里拿到生活费。依赖关系和依赖方法是相对应的必须是正确的依赖关系和依赖方法你不能打电话给你爸说让他帮你做作业也不能打电话给别人的爸要生活费。
make/Makefie的使用
在当前目录创建一个文件命名为makefile或者Makefile 使用vim编辑器打开Makefile 使用make命令执行Makefile文件 上面的文件 test,它依赖 test.o test.o , 它依赖 test.s test.s , 它依赖 test.i test.i , 它依赖 test.c make是如何工作的 make会在当前目录下找名字叫“Makefile”或“makefile”的文件。如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到“test”这个文件 并把这个文件作为最终的目标文件。如果test文件不存在或是test所依赖的后面的test.o文件的文件修改时间要比test这个文件新可以用 touch 测试那么他就会执行后面所定义的命令来生成test这个文件。如果test所依赖的test.o文件不存在那么make会在当前文件中找目标为test.o文件的依赖性如果找到则再根据那一个规则生成test.o文件。这有点像一个堆栈的过程如果你的c文件和h文件是存在的make会生成 test.o 文件然后再用 test.o 文件声明 make的终极任务也就是执行文件test了。这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错 而对于所定义的命令的错误或是编译不成功make根本不理。make只管文件的依赖性如果在找了依赖关系之后冒号后面的文件还是不在那么就不会执行了。我们创建项目也需要清理项目清理项目也是在Makefile文件中编写 像clean这种没有被第一个目标文件直接或间接关联那么它后面所定义的命令将不会被自动执行 不过我们可以显示要make执行。即命令——“make clean”以此来清除所有的目标文件以便重编译。 但是一般我们这种clean的目标文件我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是总是被执行的。 可以将我们的 test 目标文件声明成伪目标。 我们发现当我们重复执行make时它不让我们重复执行加上 .PHONY 修饰,就可以让文件总是被执行的。编译是一件非常费时间的事所以一般只编译更新后的文件如果重复执行make,被编译的文件又没有被更新make就不会被执行。建议不给生成可执行文件加上.PHONY,因为编译太费时间了清理项目可以加上。
我们编译的时候是先有源代码再有可执行程序源代码的修改时间要更晚一些如果可执行程序比源代码的修改时间更新make命令就不会再执行了。make是否执行取决于源代码和可执行程序的修改时间。 .PHONY会更新源代码的修改时间让源代码的修改时间比可执行程的修改时间序晚这样make就可以一直执行了。