如何使用makefile生成.h头文件并在同一个makefile中使用它来编译源代码?

时间:2015-12-11 22:56:20

标签: c++ c makefile

我想使用makefile生成头文件abc.h。 并且,将此头文件包含在abc.cpp文件中,该文件必须使用相同的makefile构建。

我遇到的问题是它在编译.cpp文件之前没有生成.h文件。所以,我找不到头文件的致命错误。

e.g:

//abc.h
#define VAR "My Name"
//abc.cpp
#include "abc.h"

所以,问题是如何在编译源文件之前编写生成头文件的makefile,这样我就不会出现头文件包含错误?

我已经创建了如下所示的makefile,但它在任何其他编译之前都没有生成文件:

-include dummy

noinst_LTLIBRARIES = window.la

.PHONY: dummy

dummy:
    @echo "#define VAR "MYNAME" > abc.h

window_la_SOURCES = \
    ../src/abc.cpp 

window_la_CPPFLAGS = \
    -I $(srcdir)/../src/

我想在abc.cpp开始编译之前在上面的makefile中生成abc.h。所以,我不会因为包含标题而导致致命错误。请建议。

2 个答案:

答案 0 :(得分:1)

Makefile是组织代码编译的简单方法。

您必须自己创建头文件。

答案 1 :(得分:0)

  

如何在编译源文件之前编写生成头文件的makefile,这样我就不会出现头文件包含错误?

这是一个简单的例子(假设abc.cpp存在,编译并有main()):

all: abc

abc.h: Makefile
        @echo "Generating $@"
        @echo "#define VAR \"MYNAME\"" > $@

abc.o: abc.h
abc.cpp: abc.h

abc: abc.o

默认构建abc

目标abc.hMakefile内的shell脚本生成,因此取决于Makefile

告诉make abc.cpp需要abc.h

告诉make如果abc.o发生更改,abc.h应该重建。

告诉makeabc构建abc.o

  

请建议。

基于GNU make的系统中的代码生成很难且容易出错。虽然上面的简单示例似乎微不足道,但在较大的项目中,您可能会遇到各种问题,而GNU make在诊断或调试方面几乎没有帮助。

我的建议是,除非你准备阅读整篇GNU make manual,否则就是避免这种情况。

此外,对于您只需要预处理器定义的情况,代码生成实际上是一种过度杀伤:大多数IDE和构建系统已经提供了向项目添加预处理器定义的方法。 C / C ++中的许多东西都可以简化为预处理器定义。