【问题标题】:makefile error: make: *** No rule to make target `omp.h' ; with OpenMPmakefile 错误:make: *** No rule to make target `omp.h' ;使用 OpenMP
【发布时间】:2013-02-02 04:44:51
【问题描述】:

所有,我正在用 OpenMP 编译一个 C 程序。这是我第一次使用makefile。执行“make”时,gcc 报错 make: * No rule to make target omp.h', needed bysmooth.o'。停止。但是 omp.h 在 /usr/lib/gcc/i686-linux-gnu/4.6/include/omp.h 中,我想知道如何修复它。有人可以帮我吗?谢谢。

CC=gcc
CFLAGS = -fopenmp

all: smooth

smooth: smooth.o ompsooth.o
    $(CC) $(CFLAGS) -o smooth smooth.o ompsmooth.o

ompsmooth.o: ompsmooth.c assert.h stdio.h stdlib.h omp.h ompsmooth.h
    gcc $(CFLAGS) ompsmooth.c

smooth.o: smooth.c ompsmooth.h omp.h stdio.h stdlib.h string.h sys/types.h sys/stat.h     fcntl.h
    gcc $(CFLAGS) smooth.c

clean:

    rm *.o
    rm smooth

【问题讨论】:

    标签: c gcc makefile openmp


    【解决方案1】:

    除非您希望标准头文件发生变化,否则最简单的解决方案就是将它们从先决条件列表中删除。

    如果您不想执行上述操作,那么您需要指定omp.h 的完整路径,或者使用VPATH 机制。

    【讨论】:

    • 所以,就像这样?ompsmooth.o: ompsmooth.c gcc $(CFLAGS) ompsmooth.c smooth.o: smooth.c gcc $(CFLAGS) smooth.c
    • 究竟是什么开始了这种做法?旧的 X 来源更糟糕。
    • 你明白了。如果头文件确实发生了变化,那么 make 将不知道它应该重建你的源代码,但它确实如此。各种构建工具知道如何自动扫描您的 .c 文件并为您创建头文件依赖项,但不是默认让您使用 Linux。如果您更喜欢对此大加赞赏,您可以找到一种方法让老牌的手臂为您做到这一点:scottmcpeak.com/autodepend/autodepend.html
    • @罗伯特:有点。您可能希望保留对 your 头文件(ompsmooth.h 等)的依赖,否则如果您更改它们,则不会重新编译内容。在不相关的注释中,您可以使用 自动变量 简化规则:gcc $(CFLAGS) $<.
    • @technosaurus:什么做法?
    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多