Makefile无法使用文件夹结构生成输出

时间:2020-09-10 08:38:52

标签: makefile gnu-make gnu

下面是我在其中创建的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

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