zoukankan      html  css  js  c++  java
  • Linux Makefile学习

    编译环境GNU Make 4.1

    # 变量声明方式,会在需要展开时进行展开
    # 貌似变量前面后面加空格是没关系的
    OBJECTS=   main.o test1.o test3.o   
    # 无论执行make或是make clean,打印出的TESTVAL值都是2
    # 所以变量重新赋值会可能产生一些意想不到的问题
    TESTVAL=1
    
    .PHONY:out
    # 第一个目标名为默认最终目标名
    #out:main.o test1.o test3.o
    # 等价语句
    out1:$(OBJECTS)
    	#gcc -o out main.o test1.o test3.o
    	# 等价语句
    	#gcc -o out $(OBJECTS)
    	# 等价语句
    	# $@代表所有输出
    	gcc -o $@ $(OBJECTS)
    	# 等价语句
    	# $^代表所有输入
    	#gcc -o $@ $^
    	@# 在执行过程中会显示每一句话,如果不想显示则加@
    	@echo $(TESTVAL)
    
    main.o:main.c test1.h test3.h 
    	gcc -c main.c
    
    test1.o:test1.c test1.h test2.h
    	gcc -c test1.c
    	# 如果test1.c编译错误,即便有touch,test1.o和test3.o都不会出现,在gcc -c test1.c前面加“-”号才可以实现继续make
    	#touch test1.o 
    
    test3.o:test3.c test3.h test4.h
    	gcc -c test3.c
    
    # %.o代表所有在匹配的.o输出文件
    # %.c代表.o相应名称的.c
    # 如果除了main.o、test1.o、test2.o还有其他.o文件需要匹配,则使用此条规则
    %.o:%.c
    	gcc -c $^
    	# 等价语句
    	# $<代表第一个输入参数
    	#gcc -c $<
    
    # 无论执行make或是make clean,打印出的TESTVAL值都是2
    # 所以变量重新赋值会可能产生一些意想不到的问题
    TESTVAL=2
    
    # wildcard代表通配符展开,如果“OBJS=*.o”就不对了
    # 如果变量后面加注释如下,则变量后面多了一个空格,在某些场合会出错
    # OBJS=$(wildcard *.o) #
    # .PHONY:代表无视依赖性,每次都执行,用在clean上是为了防止有文件名称为clean
    .PHONY:clean
    clean:
    	rm -f main.o test1.o test3.o out
    	@echo $(TESTVAL)
    	# 等价语句
    	#rm -f $(OBJS) out
    	# 等价语句
    	# 此处要加“-”号,否则第一步没执行完第二步就不执行了
    	#-rm -f main.o test1.o 
    	#-rm -f test3.o out
    	# 等价语句
    	#rm -f *.o out
    

    还有很多高级技巧,待续~

    参考文献:跟我一起写Makefile 陈皓

    http://blog.csdn.net/haoel/article/details/2886/

    http://blog.csdn.net/haoel/article/details/2887/

    http://blog.csdn.net/haoel/article/details/2888/

    http://blog.csdn.net/haoel/article/details/2889/

    http://blog.csdn.net/haoel/article/details/2890/

    http://blog.csdn.net/haoel/article/details/2891/

    http://blog.csdn.net/haoel/article/details/2892/

    http://blog.csdn.net/haoel/article/details/2893/

    http://blog.csdn.net/haoel/article/details/2894/

    http://blog.csdn.net/haoel/article/details/2895/

    http://blog.csdn.net/haoel/article/details/2896/

    http://blog.csdn.net/haoel/article/details/2897/

    http://blog.csdn.net/haoel/article/details/2898/

    http://blog.csdn.net/haoel/article/details/2899/

  • 相关阅读:
    C++ 虚函数表解析(转载)
    javaWeb中的/路径问题
    java创建多线程(转载)
    JSP中pageEncoding和charset区别,中文乱码解决方案(转载)
    Class.forName()的作用与使用总结(转载)
    Java内存模型
    java-锁膨胀的过程
    java对象头信息和三种锁的性能对比
    并发容器
    synchronized和volatile以及ReentrantLock
  • 原文地址:https://www.cnblogs.com/jhc888007/p/7045367.html
Copyright © 2011-2022 走看看