【问题标题】:Makefile, add headers located in parent directory (Not allowed to move inside!)Makefile,添加位于父目录中的标题(不允许在里面移动!)
【发布时间】:2018-10-04 16:51:34
【问题描述】:
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");
}

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

没有规则来制作目标“myheader1.h”,这是“prog.o”所需要的。停下来。

制作文件

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

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

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

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

【问题讨论】:

    标签: c linux makefile gnu-make


    【解决方案1】:
    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

    【讨论】:

    • 现在我得到:cc: error: myheader1.h: No such file or directory
    • 仅当我将#include "myheader1" 更改为"../myheader1" 时才有效。但是我不允许更改它...我不允许触摸代码。
    • 本地标头最好使用-iquote ..,而不是-I..
    • @TonyTannous 发布minimal reproducible example。请注意,您首先不应该在标头中定义函数,而是不断在myheader1myheader1.h 之间切换。
    • @TonyTannous:应用 melpomene 建议的修改后,我无法重现您的问题。您可能应该反复检查您是否确实按照 melpomene 的建议进行了操作。
    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 2013-02-06
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多