源代码与step1中一致。
Makefile文件修改依赖为.o
-
把依赖文件由C文件改成.o文件,gcc编译命令也做了相应的修改。不过由于 C 编译成同名的.o 文件是 make 的默认规则,所以这部分内容通常不会写上去。
-
修改后的Makefile
#hello_main:hello_main.c hello_func.c
# gcc -o hello_main hello_main.c hello_func.c -I .
#.PHONY:clean
#clean:
# rm -f *.o hello_mainhello_main: hello_main.o hello_func.o gcc -o hello_main hello_main.o hello_func.o -I . #Makefile默认规则,当*.o不存在时,默认回去在当前目录搜索.c编译。 #因此以下两条可以不用写。 #hello_main.o: hello_main.c # gcc -c helo_main.c #hello_func.o: hello_func.c # gcc -c hello_func.c
-
编译
mdxz_18@mdxz18:~/lzp/workdir/base_code/linux_app/makefile_step/step_2$ make cc -c -o hello_main.o hello_main.c cc -c -o hello_func.o hello_func.c gcc -o hello_main hello_main.o hello_func.o -I .
-
从 make 的输出可看到,它先执行了两条额外的“cc”编译命令,这是由 make 默认规则执行的,它们把 C 代码编译生成了同名的.o 文件,然后 make 根据 Makefile 的命令链接这两个文件得到最终目标文件 hello_main。
-
执行
mdxz_18@mdxz18:~/lzp/workdir/base_code/linux_app/makefile_step/step_2$ ls hello_func.c hello_func.o hello_main.c Makefile hello_func.h hello_main hello_main.o mdxz_18@mdxz18:~/lzp/workdir/base_code/linux_app/makefile_step/step_2$ ./hello_m ain hello ,world. output i=0. output i=1. output i=2. output i=3. output i=4. output i=5. output i=6. output i=7. output i=8. output i=9.