【发布时间】:2023-03-09 20:40:02
【问题描述】:
如何将所有C文件编译成目标文件并放在子目录中?
我有三个目录:
-
usr- main.c 所在的位置 -
sources1- init_var1.c 和 init_var2.c 所在的位置 -
include- 头文件所在的位置 -
obj- 此目录应包含由 1 和 2 下列出的目录中的 C 源文件生成的目标文件。
我写了这个Makefile:
CC=gcc
O_DIR = ./../obj
I_DIR = ./../include
SOURCES := $(wildcard *.c)
OBJECTS := $(SOURCES:.c=.o)
OBJECTS := $(addprefix $(O_DIR)/,$(OBJECTS))
all: $(OBJECTS)
$(OBJECTS): $(SOURCES)
$(CC) -c -I$(I_DIR) $< -o $@
但输出是
make[1]: enter directory «/home/alexey/exercise/ex_makefile/source»
gcc -c -I./../include init_var1.c -o ../obj/init_var1.o
gcc -c -I./../include init_var1.c -o ../obj/init_var2.o
make[1]: out from directory «/home/alexey/exercise/ex_makefile/source»
但是,我需要
make[1]: enter directory «/home/alexey/exercise/ex_makefile/source»
gcc -c -I./../include init_var1.c -o ../obj/init_var1.o
gcc -c -I./../include init_var2.c -o ../obj/init_var2.o
make[1]: out from directory «/home/alexey/exercise/ex_makefile/source»
请帮忙,怎么办?
【问题讨论】:
-
您应该在发布输出之前将本地化设置为默认值(例如
export LANG=C LC_ALL=C....)。并非这里的每个人都能阅读俄语错误消息。 -
@dkasak 不一样,我不会编译差异 .c 文件但我编译身份。
-
是的,我现在注意到了,抱歉。
-
我错过了所需输出与实际输出的差异。
-
$(OBJECTS): $(SOURCES)规则可疑。