c - Makefile,添加位于父目录中的头文件(不允许在内部移动!)

标签 c linux makefile gnu-make

dir1
--- myheader1.h
--- myheader2.h
    src
    --- prog.c
    --- makefile

prog.c

#include <stdio.h>
#include "myheader1.h"
#include "myheader2.h"

int main()
{
    func1();
    func2();
    return 0;
}

myheader1.h

void func1()
{
    printf("Header1\n");
}

myheader2.h

void func2()
{
    printf("Header2\n");
}

寻找有关如何从父目录添加 header 的解决方案,我发现 this问题。但它对我不起作用,我仍然收到找不到头文件的错误。

No rule to make target 'myheader1.h', needed by 'prog.o'. Stop.

生成文件

CFLAGS = -c -Wall -I.. myheader1.h

prog : prog.o
     cc -o prog prog.o

prog.o : prog.c myheader1.h
     cc $(CFLAGS) prog.c

我做错了什么?以及如何添加第二个标题而不使行变得非常长或难看?

最佳答案

prog.o : prog.c myheader1.h

这一行表示 prog.o 依赖于两个文件:prog.cmyheader1.hprog.c 存在,但 myheader1.h 不存在(至少不在同一目录中)。

应该是

CFLAGS = -Wall -I..

prog.o : prog.c ../myheader1.h
        cc $(CFLAGS) -c prog.c

注意:

    先决条件列表中的
  • ../myheader1.h,而不是 myheader1.h
  • 头文件根本不应该列在编译器命令行上
  • -c 并不真正属于 CFLAGS

关于c - Makefile,添加位于父目录中的头文件(不允许在内部移动!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52651873/

相关文章:

mysql - Windows 下最基本的 MySQL UDF 代码

c - 查找段错误而不导致崩溃

c - strncpy的实现

linux - 在这种情况下,我应该在单独的线程中读取文件吗?

c - 维护一个我不希望 Make 编译的程序列表,我可以使用 >> 和 SED 进行更改,而不是编辑 makefile?

makefile - GNU 制作 : Multiple targets in a single rule

将部分 char 数组复制到新的 char 数组失败

node.js - 打开 localhost :3000 in kiosk mode after the Node. js 服务器已完成旋转

makefile - 基于 Windows 的 make 工具的推荐

C:无法在另一个函数中访问动态大小的数组