2012-08-03 58 views
8

每次我想使用库执行程序时,我必须在终端上运行这4个命令。Makefile文件库

的线是

cc -m32 -c mylib.c 
ar -rcs libmylib.a mylib.o 
cc -m32 -c prog.c 
cc -m32 prog.o -L. -lmylib 
./a.out 

我如何作出上述命令生成文件并运行它? 一个详细的程序将不胜感激。谢谢。


编辑: 这里是解决方案:

a.out: prog.o libmylib.a 
     cc prog.o -L. -lmylib 

prog.o: prog.c mylib.h 

libprint_int.a: mylib.o 
     ar -rcs libmylib.a mylib.o 

print_int.o: mylib.c mylib.h 

clean: 
     rm a.out prog.o libmylib.a mylib.o 

这给了第2行的错误,因为我用空格代替标签。

+3

这里有一点冗余。使用静态库时,如果只将'.o'文件直接链接到应用程序中,而不是先将它们填充到'.a'文件中,则会得到相同的结果。毕竟,静态库只不过是粘在一起的一堆'.o'文件。 – 2012-08-03 07:52:49

回答

7

喜欢的东西:

program_NAME := a.out 

SRCS = mylib.c prog.c 

.PHONY: all 

all: $(program_NAME) 

$(program_NAME): $(SRCS) 
    ar -rcs libmylib.a mylib.o 
    cc -m32 prog.o -L. -lmylib 

可能让你开始

才刚刚开始使用的makefile自己,我认为他们是非常棘手,但一旦你让他们的工作,他们让生活变得更加简单(这的人概率充满错误的,但一些更经历了这么民间将概率能够帮助解决这些问题)

至于运行时,请务必将文件保存为“Makefile文件”(大小写很重要)

然后从CMD线(确保你包含Makefile文件cd到DIR):

$ make 

完蛋了!

UPDATE

如果中间静库是多余的,你可以用一个Makefile这样跳过它:

program_NAME := a.out 

SRCS = mylib.c prog.c 
OBJS := ${SRCS:.c=.o} 

CFLAGS += -m32 

program_INCLUDE_DIRS := 
program_LIBRARY_DIRS := 
program_LIBRARIES := mylib 

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir)) 
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir)) 
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library)) 

CC=cc 

LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) 

.PHONY: all 

all: $(program_NAME) 

$(program_NAME): $(OBJS) 
    $(LINK.c) $(program_OBJS) -o $(program_NAME) 
+0

以上Makefiles都不起作用。 – 2012-08-03 15:26:36

+0

它给出错误Makefile:25:***缺少分隔符。停止。 为第二个和Makefile:10:***缺少分隔符。停止。 第一个 – 2012-08-03 15:28:24

+0

请回答这个 – 2012-08-03 15:32:31

0

我认为没有更详细的过程比make命令的官方文档:http://www.gnu.org/software/make/manual/make.html#Overview

基本上,你必须创建一个目标,只是把你的命令在里面。如果你想让它在你输入'make'时工作,那么目标可以是'all'。一个好的makefile肯定会使用变量等来保持lib/sources的灵活性。

1

最简单的教程,了解使文件在Cprogramming.com可用。一旦你了解了它,那么你可以通过make file手册。

+1

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/19056300) – NaN 2018-03-09 12:20:06