为什么这个简单的makefile只构建一个源文件?

时间:2018-09-05 18:38:25

标签: makefile

我有文件X.cX.ispc,并且我想使用Makefile构建共享库X.so

但是,下面的简单makefile仅给我:

gcc -m32 -c X.c -o X.c.o
ispc -O2 --arch=x86 --target=sse4-i32x4 X.ispc -o X.ispc_o
gcc -m32 -Wl,-hash-style=sysv -fno-stack-protector -fPIC -nostdlib -shared X.c.o -o X.so

在最后一步中没有X.ispc_o。我可以知道我做错了什么吗?

ISPC=ispc
ISPCFLAGS=-O2 --arch=x86 --target=sse4-i32x4

CC = gcc
CFLAGS = -m32 -Wl,-hash-style=sysv -fno-stack-protector -fPIC -nostdlib -shared

default: so

.PHONY: clean

clean:
        /bin/rm -rf objs *.o

obj := $(patsubst %.c, %.so, $(wildcard *.c))
so: $(obj)

%.so: %.c.o %.ispc_o
        $(CC) $(CFLAGS) $< -o $@

%.ispc_o: %.ispc
        $(ISPC) $(ISPCFLAGS) $< -o $@

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

1 个答案:

答案 0 :(得分:2)

自动变量$ <是第一个必备项的名称。您想要的是$ ^。这将扩展为以空格分隔的所有必备组件名称的列表。如果您的信息页已安装

info make 'Automatic Variables'

将为您提供此类变量的完整列表。