每次我想使用库执行程序时,我都必须在终端上运行这 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
可能会让你开始
我自己才刚刚开始使用 makefile,我认为它们非常棘手,但是一旦你让它们工作,它们会让生活变得更容易(这个问题充满了错误,但一些更有经验的人可能能够帮助修复它们)
至于运行,请确保将文件保存为“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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)