下面是我在其中创建的Makefile 源代码, 头文件和 Makefile都在同一个文件夹中。
此Makefile给出正确的结果并生成输出
all : main
main : main.o
gcc -Wall -Werror -o main main.o
main.o : main.c main.h
gcc -Wall -Werror -c -MMD -MP main.c
clean:
rm -f *.o main
当我如下创建文件夹结构时
work
├── inc/
│ └── main.h files here
├── src/
│ └── main.c files here
├── _Build/
│ └── Makefile here
修改后的Makefile是
all : main
main : main.o
gcc -Wall -Werror -o main main.o
main.o : ../src/main.c ../inc/main.h
gcc -Wall -Werror -c -MMD -MP $<
clean:
rm -f *.o main
尽管文件夹的路径设置正确,但我收到此错误
gcc -Wall -Werror -c -MMD -MP ../code/src/main.c
../code/src/main.c:4:10: fatal error: main.h: No such file or directory
#include "main.h"
^~~~~~~~
compilation terminated.
make: *** [Makefile:16: main.o] Error 1
答案 0 :(得分:0)
您的问题不是专门针对make而是与include路径有关。 #include ""
语句将使用基于当前源文件的相对路径。如果将main.c中的include语句修改为:
#include "../inc/main.h"
它将找到您的标题。有关相应的文档,请参见https://gcc.gnu.org/onlinedocs/cpp/Include-Operation.html。
另一种方法是(如果要从Makefile中解决它)是通过使用-I命令行选项将inc
目录作为gcc的包含路径传递:
gcc -I./inc -Wall -Werror -c -MMD -MP $<
参见http://web.mit.edu/rhel-doc/3/rhel-gcc-en-3/directory-options.html