Makefile

一、通用示例

CC = gcc
CFLAGS = -lpthread -L ./tlACSClib -lNetDEVSDK
GFLAGS = -g -Wall -O3
TARGET = tlACSC
SRCS = $(wildcard *.c)
OBJS = $(patsubst %c, %o, $(SRCS))

$(TARGET) : $(OBJS)
$(CC) $(GFLAGS) $^ -o $(TARGET) $(CFLAGS)

%.o : %.c
$(CC) $(GFLAGS) -c $< -o $@

.PHONY : clean
clean:
rm -rf $(OBJS) $(TARGET)

二、= 和 :=

      1、“=”

      make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

            x = foo
            y = $(x) bar
            x = xyz

      在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

      2、“:=”

      “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

            x := foo
            y := $(x) bar
            x := xyz

      在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

3、

other= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

4、include、-include、sinclude

include包含其他的Makefile文件或者.mk文件。从而可以使用包含文件中的变量。
-include是指定编译器,即使没有这个文件也照常编译,不报错。编译继续进行。
sinclude和-include的效果一样

5、多级目录

make -C