我想使用makefile生成一个头文件abc.h。并且,将此头文件包含在 abc.cpp 文件中,该文件必须从相同的 makefile 构建。
我面临的问题是在编译 .cpp 文件之前它没有生成 .h 文件。因此,我收到了未找到头文件的致命错误。
例如:
//abc.h
#define VAR "My Name"
Run Code Online (Sandbox Code Playgroud)
//abc.cpp
#include "abc.h"
Run Code Online (Sandbox Code Playgroud)
所以,问题是如何在编译源文件之前编写生成头文件的 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/
Run Code Online (Sandbox Code Playgroud)
我想在开始编译 abc.cpp 之前在上面的 makefile 中生成 abc.h。因此,我不会因包含标头而出现致命错误。请建议。
如何在编译源文件之前在生成头文件的地方编写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
Run Code Online (Sandbox Code Playgroud)
默认情况下构建abc
.
目标abc.h
是由 内的 shell 脚本生成的Makefile
,因此依赖于Makefile
.
告诉make
我们abc.cpp
需要abc.h
.
告诉make
如果发生变化abc.o
应该重建abc.h
。
告诉从make
构建.abc
abc.o
请建议。
基于 的系统中的代码生成GNU make
非常困难且容易出错。尽管上面的简单示例看起来微不足道,但在较大的项目中,您可能会遇到各种问题,而这些问题GNU make
实际上对诊断或调试没有任何帮助。
我的建议是,除非你准备阅读整个GNU make 手册,否则应该避免这种情况。
此外,对于只需要预处理器定义的情况,代码生成实际上是一种矫枉过正:大多数 IDE 和构建系统已经提供了将预处理器定义添加到项目的方法。C/C++ 中的许多内容都可以简化为预处理器定义。
归档时间: |
|
查看次数: |
4543 次 |
最近记录: |