c - 库的 Makefile

标签 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

如何为上述命令制作一个 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,我认为它们非常棘手,但是一旦你让它们工作,它们会让生活变得容易得多(这些可能充满错误,但一些更有经验的 SO 人可能会帮助修复他们)

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

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

$ make

就是这样!

更新

如果中间静态库是多余的,你可以用这样的 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)

关于c - 库的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11791076/

相关文章:

使用 pipe() 在 linux 中链接管道

c - 对 `dlsym' 的 undefined reference Learn C The Hard Way

c++ - VS2015如何将静态库链接到其他库和可执行文件?

linux - 在 makefile 中设置共享库的路径以进行编译

c++ - 使用 Make 使用 g++ 编译时出现 "Bad command or file name"错误

objective-c - Xcode6 创建胖静态库 iOS 通用框架

c - C 中的库是静态链接的吗?

创建一个全局字符指针

c - 错误 C2371 : redefinition; different basic types - why?

c - 指向 C 中结构的指针的工作示例