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

原文地址:https://www.cnblogs.com/mydomain/p/2136087.html