use*_*467 6 c macos gcc makefile
由于我在我的mac上安装了小牛,我无法编译我的一些程序.
**clang:错误:生成多个输出文件时无法指定-o**
makefile是:
SHELL = /bin/sh
CC = gcc
CFLAGS = -Wall -O3 -funroll-all-loops
EXEC = program
SRC = $(EXEC).c file1.c file2.c file3.c file4.c
OBJ = $(SRC:.c=.o)
LIB = $(SRC:.c=.h)
all: $(EXEC)
$(EXEC): $(OBJ) $(LIB)
$(CC) -o $@ $^ $(LDFLAGS) -lm
%.o: %.c $(LIB)
$(CC) -o $@ -c $< $(CFLAGS)
Run Code Online (Sandbox Code Playgroud)
感谢您的关注
Eri*_*hil 11
$(LIB)从线上删除:
$(EXEC): $(OBJ) $(LIB)
Run Code Online (Sandbox Code Playgroud)
方式LIB是定义的,它具有价值program.h file1.h file2.h file3.h file4.h.这有两个影响.
首先,它说$(EXEC),这program取决于.h文件.但是,program仅取决于.o文件.program不直接使用.h其构建中的文件,因此program不应包含.h文件的依赖项.
其次,$^命令中的内容表示列出目标所依赖的所有文件.这会将所有.o和.h文件传递给编译器.当编译器看到.h列出的几个文件时,它会发现将编译几个源文件,因此将生成几个目标文件.
$(LIB)从此规则中的依赖项中删除时,.h文件将不会在命令中列出.然后编译器将只看到几个.o文件,因此它将知道它将多个对象链接到一个可执行文件中,并且不会尝试编译源文件.