CC = gcc
CFLAGS = -std=c99 -Werror
VPATH = ./src:./include
.MAIN: libstring.so
.PHONY: clean
libstring.o: libstring.c libstring.h
$(CC) $(CFLAGS) -c $< -I ./include -o $@
libstring.so: libstring.o
$(CC) -fPIC -shared $< -o $@
clean:
rm -rf ./*.o ./*.so
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,我特别感兴趣的是我是否<正确使用自动变量.如果源/先决条件是交流源文件,但是对象文件似乎失败,则此方法有效.
编译时,我收到错误:
gcc -fPIC -shared -o libstring.so
gcc: No input files specified
Run Code Online (Sandbox Code Playgroud)
你确定你使用的是 GNU make 吗?您编写的代码将在 GNU make 中按照您的预期工作。但是,其他版本的 make 不支持显式规则中的自动变量,仅支持后缀(隐式)规则中的自动变量。例如,如果您使用 SunOS/Solaris make,那么$<在明确的规则上将为空。