同时为静态库和可执行文件创建 makefile

标签 c makefile

我有 3 个应包含在静态库中的文件(file1.c、file2.c、file3.c)和一个应包含主函数(main.c 文件)并链接到静态库的文件。

我想创建一个 makefile 来创建库,然后创建可执行文件。

我的基本 makefile 是:

CC=gcc
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=file1.c file2.c file3.c
OBJECTS=$(SOURCES:.c=.o)
OUT=libctest.a
EXECUTABLE=hello
LDFLAGS = -static

.c.o:
    $(CC) $(CFLAGS) -c $< -o $@

$(OUT): $(OBJECTS)
    ar rcs $(OUT) $(OBJECTS)

all:
    (CC) -o $(EXECUTABLE) main.c $(OUT)

clean:
    rm -f $(OBJECTS) $(OUT)

已创建库,但未创建可执行文件(全部:(CC) -o $(EXECUTABLE) main.c $(OUT)) 知道需要什么吗?

最佳答案

Make 默认情况下会处理 Makefile 中的第一个目标。在您的情况下,这是 .c.o 目标。要使 all 成为默认目标,请将其移至顶部。许多人更喜欢一种 all 不做任何事情而是依赖于其他人的风格。类似的事情:

all: $(EXECUTABLE)

$(OUT): $(OBJECTS)
    ar rcs $(OUT) $(OBJECTS)

$(EXECUTABLE): main.c $(OUT)
    (CC) -o $(EXECUTABLE) main.c $(OUT)

关于同时为静态库和可执行文件创建 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30173313/

相关文章:

c++ - QT make 在构建时有大量输出

c - 包含标题时未定义的函数引用

c++ - 为什么 Hello world 在 vi​​m 中无法打印,但在 tty 中却可以打印?

在没有 -fms-extensions 的情况下创建 "nested structs"?

c++ - 使用库的 Makefile

makefile - 在 OSX 10.8.3 : "ld: library not found for -lX11" 中使用 X11

c - 为什么相同的代码会在 32 位和 64 位机器上产生不同的数值结果?

c - pset4 cs50 recovery.c 指导

c++ - 转换到 int vs floor

将特定数组元素与 C 中具有 "if"的字符串进行比较?