了解make实用程序和标头.h文件用法的问题

时间:2017-01-07 03:29:30

标签: makefile gnu-make

我正在尝试学习make命令,但我对使用标题的方式有点麻烦

我得到了prg1.c

#include <stdio.h>

main()
{
     printf("Hello World\n");
     print();
}

prg2.c

#include <stdio.h>
print()
{
     printf("Hello World from prg2\n");
}

这是make文件

objects = prg1.o prg2.o

exe : $(objects)
    cc -o exe $(objects)

prg1.o : prg1.c
    cc -c prg1.c 

prg2.o : prg2.c
    cc -c prg2.c

这完美无缺。但是如果我在两个文件中都没有包含stdio.h然后我必须使用make编译它,我该如何编写makefile?

1 个答案:

答案 0 :(得分:3)

如果您不包含<stdio.h>,那么您可以执行以下两项操作之一:

  • printf自己提供正确的声明:

    int printf(const char *fmt, ...);
    

    几乎没有任何理由做这样的事情。

  • 如果您的编译器是GCC,请使用-include编译器选项强制包含"stdio.h"

    prg1.o: prg1.c
            gcc -c -include stdio.h prg1.c
    

    这完全是好事;不要这样做。

请注意,make实用程序与确保C转换单元中包含正确的标题材料无关。 make是一个实用程序,它运行shell命令以响应某些不存在的文件或具有比其他文件旧的修改标记。