首页 文章

gcc无法使用多个文件指定-o和-c或-S

提问于
浏览
1

每当我在Makefile中尝试构建类似的东西时 -

gcc -o main.o -IStarterWare_Files -c main.c StarterWare_Files/test.h StarterWare_Files/add.h

它引发了我的错误,gcc:无法使用多个文件指定-o和-c或-S . 基本上我想让我的makefile再次构建目标,如果我改变我的一个头文件中的一些宏 . 我目前的Makefile是 -

EXE    = nextgenrsm
CC     = gcc
LIBS   = StarterWare_Files/
CPPFLAGS = _IStarterWare_Files/


MAIN_OBS = $(patsubst %.c,%.o,$(wildcard *.c))
LIB_OBS  = $(patsubst %.c,%.o,$(wildcard StarterWare_Files/*.c))

all: $(EXE)

$(EXE): $(MAIN_OBS) $(LIB_OBS)
    $(CC) -o $@ $(LDFLAGS) $(MAIN_OBS) $(LIB_OBS) $(LDLIBS)

%.o: %.c 
    $(CC) -o $@ -MD -MP $(CPPFLAGS) $(CFLAGS) -c $^

ALL_DEPS = $(patsubst %.o,%.d,$(MAIN_OBS), $(LIB_OBS))
-include $(ALL_DEPS)

clean:
    rm -f $(LIB_OBS) $(EXE) $(MAIN_OBS) $(ALL_DEPS)

.PHONY: all clean

如果其中一个头文件被修改,我无法弄清楚要再次构建我的可执行文件会做出哪些更改 . 我不想做干净再做 .

1 回答

  • 0

    automake系统处理此问题的方法是不使用 %.o: %.c ,而是列出C文件和C文件中的所有标头 .

    例如:

    main.o: main.c StarterWare_Files/test.h StarterWare_Files/add.h
        $(CC) -o $@ -MD -MP $(CPPFLAGS) $(CFLAGS) -c $^
    

    有关将读取C文件并找出make依赖项的工具,请参阅makedepends .

相关问题