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

标签 c++ c makefile

我想用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.hMakefile 中的 shell 脚本生成,因此依赖于 Makefile

告诉 make abc.cpp 需要 abc.h

告诉 make 如果 abc.h 改变,abc.o 应该被重建。

告诉 makeabc.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/

相关文章:

unit-testing - 单元测试构建文件

java - 使用 makefile 无法找到或加载主类

c++ - 在派生类中重载运算符

python - 如何在c中实现Python socket.unwrap()?

无法将字符串输入结构数组

c++ - 如何在 C++ 中处理 "exit current function, if error on current statement"

c - Makefile C 包含已安装库的头文件并链接到库的最佳方法

c++ - 将对 Shell32.lib 的依赖添加到 WDK 生成文件

c++ - 带有抽象类的 Python ctypes

c++ - 将 boost::function 克隆到一个指针中并使用该指针调用包装函数