bmake:正确使用自动变量

Bra*_*her 5 c makefile

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)

Mad*_*ist 3

确定你使用的是 GNU make 吗?您编写的代码将在 GNU make 中按照您的预期工作。但是,其他版本的 make 不支持显式规则中的自动变量,仅支持后缀(隐式)规则中的自动变量。例如,如果您使用 SunOS/Solaris make,那么$<在明确的规则上将为空。

  • 啊,愚蠢的我。我找不到一个选项来使我的 make 版本打印其版本信息并“假定”它是 gnu make。经过一番快速谷歌搜索后,我猜想 FreeBSD 使用它自己的 make 版本。我更新了标题以反映 FreeBSD 的 make 版本。 (2认同)