【发布时间】:2016-02-22 14:19:33
【问题描述】:
我正在尝试编写我认为非常简单的 Makefile,我只是感到困惑!我不是 makefile 编写者,但我认为我对它们的了解足以让一个简单的文件正常工作。
好的,我在一个目录中有一个小项目,这个目录中还有一个包含许多 .c 文件的 libs 目录。我要做的是编写一个makefile,它将/libs目录的内容构建到/libs目录中的静态lib文件中,然后编译/目录中的一些源文件并将其链接到构建的.a文件。
我确定有人会建议“为什么不使用 cmake”,但这不是我正在寻找的答案(像绝地武士一样挥手.. ehehehehe)
CC = gcc
CFLAGS = -Wall
SOURCES = lzx.c csum.c dirs.c listner.c tree.c
OBJECTS = $(SOURCES:.c=.o)
TARGETLIB = libs/mylib.a
TARGET = TestApp
libs/%.o : libs/%.c
$(CC) $CFLAGS -c $<
$(TARGETLIB) : $(OBJECTS)
ar rcs $@ $^
$(TARGET) :
$(CC) $CFLAGS Source1.cpp Source2.cpp -llibs/mylib.a -o $@
我的理解是第一个配方会将所有 .c 文件编译成对象,但它似乎编译第一个 .c 文件然后停止。
任何人都可以给我任何帮助将不胜感激。
【问题讨论】:
-
感谢 Basile,但我已经看过这些示例,虽然它们很接近,但它们并没有完全符合我的要求。我的主要问题是 %.o : %.c 在我的脑海中应该编译 libs/ 目录中的所有 .c 文件,但实际上只编译列表中的第一个文件,然后由于我无法解释的原因而失败。 make --trace 是个好主意。
-
所以
libs/包含lzx.c csum.c dirs.c listner.c tree.c,而这些是您要编译并组合成libs/mylib.a的文件,对吗? -
+Beta 是的,我想把libs目录下的.c文件编译成libs目录下的mylib.a文件。一旦创建了 .a 文件,就可以将其链接到项目根目录中的其他文件。