我想使用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。所以,我不会因为包含标题而导致致命错误。请建议。
答案 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.h
由Makefile
内的shell脚本生成,因此取决于Makefile
。
告诉make
abc.cpp
需要abc.h
。
告诉make
如果abc.o
发生更改,abc.h
应该重建。
告诉make
从abc
构建abc.o
。
请建议。
基于GNU make
的系统中的代码生成很难且容易出错。虽然上面的简单示例似乎微不足道,但在较大的项目中,您可能会遇到各种问题,而GNU make
在诊断或调试方面几乎没有帮助。
我的建议是,除非你准备阅读整篇GNU make manual,否则就是避免这种情况。
此外,对于您只需要预处理器定义的情况,代码生成实际上是一种过度杀伤:大多数IDE和构建系统已经提供了向项目添加预处理器定义的方法。 C / C ++中的许多东西都可以简化为预处理器定义。