【发布时间】:2015-12-11 22:56:19
【问题描述】:
我想使用 makefile 生成一个头文件 abc.h。 并且,将此头文件包含在 abc.cpp 文件中,该文件必须从相同的 makefile 构建。
我面临的问题是在编译 .cpp 文件之前它没有生成 .h 文件。所以,我收到了一个找不到头文件的致命错误。
例如:
//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。所以,我不会因为标题包含而遇到致命错误。请提出建议。
【问题讨论】:
-
生成?它已经存在。是不是和
abc.cpp在同一个目录下? -
为什么要生成表头?为什么不手写呢?看起来很简单。
-
最简单的方法是:在编译(不链接)abc.ccp文件的规则上,添加头文件:
abc.h作为前提条件。比如:abc : abc.c abc.h -
gcc编译器有一个参数可用于生成(在这种情况下)abc.d 文件,该文件还需要在 makefile 中为#include并作为先决条件列出abc.c 文件的编译规则。但是,将处理的只是 abc.c 文件中的 #include 语句。如果您想要任何其他内容,例如 abc.h 文件中的任何特殊 #defines,那么您“可以”在输出 abc.h 文件的 makefile 中有一个“inline/hereis”文件,但是,只需打开你的编辑器,生成文件,保存它。然后编译规则会将其列为先决条件 -
如果abc.h文件不在同一目录下(即使在同一目录下),在编译命令中添加
-I.(对于同一目录下)参数会告诉编译器在哪里找到头文件