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

1 c c++ makefile

我想使用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。因此,我不会因包含标头而出现致命错误。请建议。

Dum*_*001 5

如何在编译源文件之前在生成头文件的地方编写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构建.abcabc.o

请建议。

基于 的系统中的代码生成GNU make非常困难且容易出错。尽管上面的简单示例看起来微不足道,但在较大的项目中,您可能会遇到各种问题,而这些问题GNU make实际上对诊断或调试没有任何帮助。

我的建议是,除非你准备阅读整个GNU make 手册,否则应该避免这种情况。

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