【发布时间】:2020-05-04 09:30:25
【问题描述】:
我是 Makefile、C 和 Linux 的新手。我正在使用 gcc 和 ubuntu。我在尝试编译带有库链接的代码时遇到了问题。
这是我的问题。我有:
a_tests.c & b_tests.c files in "tests" folder
lib.a file in "build" folder
这是Makefile中与问题相关的代码:
CFLAGS=-g -O2 -Wall -Wextra -Isrc -DNDEBUG $(OPTFLAGS)
TARGET=build/lib.a
TEST_SRC=$(wildcard tests/*_tests.c)
TESTS=$(patsubst %.c,%,$(TEST_SRC))
tests: CFLAGS += $(TARGET)
tests: $(TESTS)
编译测试文件时,会提示“undefined reference to 'XXXfunction'”错误。因为后面执行的是
gcc -g -O2 -Wall -Wextra -Isrc -DNDEBUG build/lib.a tests/a_tests.c -o test/a_tests
gcc -g -O2 -Wall -Wextra -Isrc -DNDEBUG build/lib.a tests/b_tests.c -o test/b_tests
但是应该在输出文件名后面加上“build/lib.a”来解决(如果我手动输入下面的命令,代码会编译成功),即:
gcc -g -O2 -Wall -Wextra -Isrc -DNDEBUG tests/a_tests.c -o test/a_tests build/lib.a
gcc -g -O2 -Wall -Wextra -Isrc -DNDEBUG tests/b_tests.c -o test/b_tests build/lib.a
但我不知道如何更改 Makefile,我尝试了 -l -L 选项,但它们不起作用。它会警告“找不到 .a 文件”。任何帮助,将不胜感激。非常感谢您!
【问题讨论】:
-
完整 Makefile 文件发布了吗?
-
您真的要为每个找到的 c 文件创建一个程序吗?还是您想编译所有 c 文件,将它们与库链接在一起并构建一个可执行文件?