Makefile中对不同文件使用不同的编译选项

有时,我们需要对不同文件使用不同的编译选项,比如对某些SSE指令使用AVX,但是对其他一些指令使用SSE,注意-mavx会将一些SSE指令自动替换为AVX指令,同样的-msse4.1有时会将SSE2的指令自动转换为SSE4指令,这会导致SSE2的CPU上运行时core dump。所以我们要强制只针对某些文件使用avx或者sse指令。下面就是一个简单的例子

CC=gcc
SRC=source1.c source2.c source3.c
OBJ=$(patsubst %.c,%.o,$(SRC))
EXE=test
FLAGS= -g -O2

source2.o: FLAGS+=-fopenmp

all: $(EXE)

$(EXE): $(OBJ)
$(CC) -o $@ $^ $(FLAGS)

%.o: %.c
$(CC) -c -o $@ $^ $(FLAGS)

clean:
rm $(EXE)$
rm *.o
注意copy时,规则下一行要有Tab,不能是空格,否则make会报告分隔符错误。