2015-05-11 64 views
2

我有3个文件应该包含在静态库(file1.c,file2.c,file3.c)中,还有一个文件应该包含main函数(main.c文件)和链接到静态库。同时为静态库和可执行文件创建makefile

我想创建一个makefile来创建库,然后创建可执行文件。

我的基本的Makefile:

CC=gcc 
CFLAGS=-c -Wall 
LDFLAGS= 
SOURCES=file1.c file2.c file3.c 
OBJECTS=$(SOURCES:.c=.o) 
OUT=libctest.a 
EXECUTABLE=hello 
LDFLAGS = -static 

.c.o: 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

$(OUT): $(OBJECTS) 
    ar rcs $(OUT) $(OBJECTS) 

all: 
    (CC) -o $(EXECUTABLE) main.c $(OUT) 

clean: 
    rm -f $(OBJECTS) $(OUT) 

图书馆创建,但可执行文件不创建(所有:(CC)-o $(可执行文件)的main.c $(OUT)) 任何想法需要什么?

+0

(CC)-o $(EXECUTABLE)main.c $(OUT)这是你的问题或实际生成文件中的拼写错误吗?它应该是$ {CC} – sabbahillel

+0

这是一个错字,不能用美元符号 – Moti

回答

2

Make将默认处理Makefile中的第一个目标。在你的情况下,这是.c.o目标。要制作all,默认目标将其移动到顶部。许多人更喜欢这样一种风格,all不会做任何事情,而是依赖于其他人。这些行是:

all: $(EXECUTABLE) 

$(OUT): $(OBJECTS) 
    ar rcs $(OUT) $(OBJECTS) 

$(EXECUTABLE): main.c $(OUT) 
    (CC) -o $(EXECUTABLE) main.c $(OUT) 
all: $(EXECUTABLE) 

$(OUT): $(OBJECTS) 
    ar rcs $(OUT) $(OBJECTS) 

$(EXECUTABLE): main.c $(OUT) 
    (CC) -o $(EXECUTABLE) main.c $(OUT) 
+0

@Moti工作,也不要忘记在'clean'工件中添加'$(EXECUTABLE)'。 –

+0

谢谢,它的工作 – Moti

+0

只是为了澄清:'.co'目标不被视为makefile中的默认目标:make在makefile中选择第一个_explicit_目标,'.co'是_suffix rule_这是一个隐式目标,所以它不算。正如你所预料的那样,第一个明确的目标是'$(OUT)'或者'libctest.a'。 – MadScientist

相关问题