Aak*_*nuj 11 c makefile static-libraries
每次我想使用库执行程序时,我必须在终端上运行这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
Run Code Online (Sandbox Code Playgroud)
如何为上述命令创建一个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
Run Code Online (Sandbox Code Playgroud)
这在第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
Run Code Online (Sandbox Code Playgroud)
可能会让你开始
只是刚开始使用makefiles而且我认为它们非常棘手但是一旦你让它们工作就会让生活变得更轻松(这些充满了bug,但是一些经验丰富的SO民众可以帮助修复它们)
至于运行,请确保将文件保存为"Makefile"(大小写很重要)
然后从cmd行(确保你cd到包含Makefile的目录):
$ make
Run Code Online (Sandbox Code Playgroud)
而已!
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38931 次 |
| 最近记录: |