库的Makefile

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

线条是

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

如何为上述命令创建一个makefile并运行它? 一个详细的程序将不胜感激。 谢谢。


编辑:这是解决方案:

 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行给出了错误,因为我使用空格而不是制表符。

就像是:

 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 

可能会让你开始

只是刚开始使用makefiles而且我认为它们非常棘手但是一旦你让它们工作就会让生活变得更容易(这些充满了bug,但是一些经验丰富的SO民众可以帮助修复它们)

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

然后从cmd行(确保你cd到包含Makefile的目录):

 $ 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) 

有关make文件的最简单教程可在Cprogramming.com中找到 。 一旦你理解了它,你就可以通过make file手册。

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

基本上你必须创建一个目标,然后将命令放入其中。 如果你想在键入’make’时使用它,目标可能是’all’。 一个好的makefile肯定会使用变量等来保持它对lib / sources添加的灵活性。