gpt4 book ai didi

c - OSX Mavericks 导致 "cannot specify -o when generating multiple output files"

转载 作者:太空狗 更新时间:2023-10-29 17:19:14 29 4
gpt4 key购买 nike

自从我在我的 mac 上安装了 mavericks,我无法编译我的一些程序。

**clang: error: 生成多个输出文件时不能指定-o**

生成文件是:

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)

感谢您的关注

最佳答案

从行中删除 $(LIB):

$(EXEC): $(OBJ) $(LIB)

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 文件,因此它知道它正在将几个对象链接到一个可执行文件中,并且不会尝试编译源文件。

关于c - OSX Mavericks 导致 "cannot specify -o when generating multiple output files",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913319/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com