makefile为多个源

时间:2017-05-04 09:23:17

标签: c makefile

学习make文件的时候我试图为多个源目录编写一个make文件,似乎我错了。

这是我的代码结构:

directory
├── common
│   └── fun2.c
├── inc
│   └── fun.h
└── src
    ├── fun1.c
    └── main.c

这是我的makefile:

CC= cc 
CFLAGS = -c -Iinc/
SOURCE=fun1.c\
       main.c\
       common\fun2.c
OBJECTS=$(SOURCE:.c=.o)
EXECUTABLE=hello
all: $(EXECUTABLE)
$(EXECUTABLE):$(OBJECTS)
    $(CC) -o $@ $(OBJECTS)
.c.o:
    $(CC) $(CFLAGS) $< 
clean:
    rm -rf *o hello 

运行makefile时遇到错误

无法找到从依赖项创建目标common \ fun2.o的规则。 谁能指出这里有什么问题

2 个答案:

答案 0 :(得分:0)

您的.c来源不在directory,而在directory/src。因此修复:

SOURCE=src/fun1.c src/main.c common/fun2.c

.c.o:规则是不必要的,GNU make has a similar built-in rule。或者,修复规则以输出到正确的目录:

.c.o:
    $(CC) -o $@ $(CFLAGS) $< 

目标allclean应为.PHONY,即:

.PHONY: all clean

答案 1 :(得分:0)

HashMap<String, String> dur_call = new HashMap<String, String>();
HashMap<String, String> brows_call = new HashMap<String, String>();
HashMap<String, String> brows_call_dst = new HashMap<String, String>();
HashMap<String, String> subs = new HashMap<String, String>();
HashMap<String, String> sub_dur = new HashMap<String, String>();
HashMap<String, String> act = new HashMap<String, String>();
HashMap<String, String> low_bal = new HashMap<String, String>();
HashMap<String, String> deact = new HashMap<String, String>();
HashMap<String, String> re_act = new HashMap<String, String>();

for (String value : datetime) {
    dur_call.put(value, "0");
    brows_call.put(value, "0");
    brows_call_dst.put(value, "0");
    subs.put(value, "0");
    sub_dur.put(value, "0");
    act.put(value, "0");
    low_bal.put(value, "0");
    deact.put(value, "0");
    re_act.put(value, "0");
}
相关问题