• 23、makefile常用讲解(3)


    8)objects = *.o

         通配符同样可以用在变量中。并不是说[*.o]会展开,objects的值就是“*.o”。Makefile 中的变量其实就是 C/C++中的宏。如果你要让通配符在变量中展开,也就是让 objects 的值是所有[.o]的文件名的集合,那么,你可以这样:objects := $(wildcard *.o),这种用法由关键字“wildcard”指出。

    9)通过makefile编译,自动推导,如果发现当前的文件没有做过更新,则不会编译,只编译更新过了的。

    附:

    1、预定义变量选项

    预定义变量

    含义

    $* 

    不包含扩展名的目标文件名称。

    $+ 

    所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。

    $< 

    第一个依赖文件的名称。

    $? 

    所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。

    $@ 

    目标的完整名称。

    $^ 

    所有的依赖文件,以空格分开,不包含重复的依赖文件。

    $% 

    如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称为 mytarget.so(image.o),则 $@ mytarget.so,而 $% image.o

    AR  

    归档维护程序的名称,默认值为 ar

    ARFLAGS

    归档维护程序的选项。

    AS 

    汇编程序的名称,默认值为 as

    ASFLAGS

    汇编程序的选项。

    CC 

    C 编译器的名称,默认值为 cc

    CCFLAGS 

    C 编译器的选项。

    CPP 

    C 预编译器的名称,默认值为 $(CC) -E

    CPPFLAGS

    C 预编译的选项。

    CXX 

    C++ 编译器的名称,默认值为 g++

    CXXFLAGS

    C++ 编译器的选项。

    2、make 选项

    命令行选项

      含义

    -C DIR

      在读取 makefile 之前改变到指定的目录 DIR

    -f FILE

     以指定的 FILE 文件作为 makefile

    -h

      显示所有的 make 选项。

    -i

      忽略所有的命令执行错误。

    -I DIR

      当包含其他 makefile 文件时,可利用该选项指定搜索目录。

    -n

      只打印要执行的命令,但不执行这些命令。

    -p

      显示 make 变量数据库和隐含规则。

    -s

      在执行命令时不显示命令。

    -w

      在处理 makefile 之前和之后,显示工作目录。

    -W FILE

      假定文件 FILE 已经被修改。

    3、示例代码

    CC=gcc

    CXX=g++

    CFLAGS= -g -Wall

    INC=./***

    LIB=./***.a

    CFLAGS+= -DSNACC_DEEP_COPY -DHAVE_VARIABLE_SIZED_AUTOMATIC_ARRAYS -Wno-deprecated -lpthread -lssl

    TARGET=***

    OBJ = **.o \

          ./**.o\

    $(TARGET): $(OBJ)

            $(CXX) $(CFLAGS) -o $@ $^ $(LIB) 

    #如下代码,把所有的cpp文件编译成.o文件

    %.o: %.cpp

            $(CXX)  $(CFLAGS) $(INC) -c -o $@ $<

    clean:

            rm -f *.o

            rm -f $(TARGET)

    参考

    1http://www.cnblogs.com/goodcandle/archive/2005/11/17/278702.html

    2www.wenku.baidu.com

    3http://www.chinaunix.net/jh/23/408225.html

    4http://www.gnu.org/software/make/manual/make.html

  • 相关阅读:
    XAMPP安装过程中,出现的问题
    Javascript的数据类型和转换
    Vue组件之间的通信
    vue2.0在页面中自定义组件模块,以及页面与组件之间的数据传递
    本地起一个https服务器
    开发人员初始化操作
    添加环境变量
    公钥~gitlab~免密登录
    class继承随笔
    阿里云ECS随笔
  • 原文地址:https://www.cnblogs.com/mydomain/p/2136087.html
Copyright © 2020-2023  润新知