【发布时间】:2018-11-27 23:23:31
【问题描述】:
我正在尝试用 C 为我的项目编写 Makefile。
我的.c 文件在src 子文件夹中,.o 文件在build 子文件夹中,.h 文件在src/header 子文件夹中
和.c 文件在tests 子文件夹中进行测试。
在我的 Makefile 中,我使用的是 vpath:
vpath %.c src:tests
vpath %.h src/header
vpath %.o build
当我想编译 file1 时,Makefile 在子文件夹中找到 file1.c 并将目标文件编译到子文件夹中作为 build/file1.o 没有问题。但是当它把file1编译成可执行文件时,Makefile找不到file1.o
这是我在 Makefile 中针对特定文件的代码:
test_file1: test_file1.o file.o
$(CC) $^ -o tests/$@
test_file1.o: test_file1.c file1.h
$(CC) $(CFLAGS) -c $< -o build/$@
file1.o: file1.c file1.h file2.h file3.h
$(CC) $(CFLAGS) -c $< -o build/$@
从test_file1.o 我得到:gcc -std=c99 -Wall -Wextra -pedantic -g -c tests/test_file1.c -o
build/test_file1.o 没有问题。
从file1.o 我得到:gcc -std=c99 -Wall -Wextra -pedantic -g -c src/file1.c -o build/file1.o 也没有问题。
但是从test_file1 我得到没有子文件夹路径的文件:gcc test_file1.o file1.o -o tests/test_file1。
并得到这个错误:gcc: error: test_file1.o: No such file or directory
gcc: error: file1.o: No such file or directory
gcc: fatal error: no input files
这两个文件都在子文件夹build。
哪里出了问题?
【问题讨论】:
-
欢迎来到 Stack Overflow。看起来好像您发布的代码中有几个拼写错误。请尽量避免这种情况;您更容易为我们发现此类错误。