c - 用于构建链接先前构建的库的多个应用程序的 Makefile

标签 c makefile

我认为按如下方式组织我的项目:

我的项目

|--src

|--包括

|--测试

核心文件驻留在目录 src 和 include 中,而核心的不同测试应用程序位于 test 目录中(多个 *.c 包含每个 main() 函数)。核心应该构建为静态库,它将链接到所有应用程序)。

如何编写一个基本的 Makefile 来满足这些要求?我已经用谷歌搜索并发现以下网站提供了用于构建可执行文件的 Makefile 模板 1 。如何扩展此 Makefile 以满足我的需要?

如果您认为我的项目组织不好或者您有更好的想法,请告诉我!

感谢任何帮助!

谢谢,乔纳斯

最佳答案

你还没有说你想要库去哪里,所以我假设它应该进入对象已经所在的src/

src/libcore.a: $(OBJECTS)
    $(AR) -cvq $@ $^

看起来您的 makefile 将从 test/testfoo.c 构建 test/testfoo.o,所以我假设这是可行的。而且您还没有说要将可执行测试(例如 testfoo)放在哪里,所以我将它们放在 test/ 中。

test/%: test/%.o src/libcore.a
    $(CC) -o $@ $< -Lsrc -lcore

编辑:

如果您希望 Make 默认构建所有测试,那么您应该在 makefile 中的任何其他规则之前添加此规则:

TESTS := $(patsubst %.c,%,$(wildcard test/*.c))

all: $(TESTS)

关于c - 用于构建链接先前构建的库的多个应用程序的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15029103/

相关文章:

linux - 包含路径错误?

python - 使: f2py: No such file or directory

c - 字符串输出数组,缺少字符,ncurses

c - Glib 哈希表存储了不正确的键

c - 为什么在 stdbool.h 中使用整数而不是无符号整数?

c - c中同一个函数的两个声明

c - 仅使用整数缩放值

linux - Coreutils 测试套件命令

makefile - Autotools 库和目标文件输出控制

c++ - 在PC上编译一个c++程序与DJI phantom 4 pro通信