我想用makefile生成一个头文件abc.h。 并且,将此头文件包含在 abc.cpp 文件中,该文件必须从同一个 makefile 构建。
我遇到的问题是它在编译 .cpp 文件之前没有生成 .h 文件。所以,我收到一个关于找不到头文件的 fatal error 。
例如:
//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。因此,我不会因标题包含而出现 fatal error 。请提出建议。
最佳答案
how to write makefile where it generates header file before compiling source file so that i don't get header file inclusion error?
这里有一个简单的例子(假设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.h
改变,abc.o
应该被重建。
告诉 make
从 abc.o
构建 abc
。
Please suggest.
在基于 GNU make
的系统中生成代码非常困难且容易出错。虽然上面的简单示例看起来微不足道,但在较大的项目中,您可能会遇到各种问题,GNU make
几乎无法提供诊断或调试方面的帮助。
我的建议是,除非您准备好通读 GNU make manual , 是为了避免这种情况。
此外,对于只需要预处理器定义的情况,代码生成确实是一种矫枉过正的做法:大多数 IDE 和构建系统已经提供了将预处理器定义添加到项目中的方法。 C/C++ 中的很多东西都可以简化为预处理器定义。
关于c++ - 如何使用 makefile 生成 .h 头文件并在同一个 makefile 中使用它来编译源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233901/