即使编译器中没有.h文件,gcc也会生成.h.gch文件

问题描述 投票:0回答:1

我们正在为一个类项目制作一个makefile,并且在gcc生成.h.gch文件时遇到了问题。环顾堆栈溢出,显然这通常是由于在依赖项中包括.h文件或具有#include *.cpp之类的东西引起的,而我们在make文件中没有这样做。

我们在编译,更改文件并再次编译时收到此错误。现在,我们可以在再次编译之前使用make clean对其进行修复,但如果可能的话,我们希望防止生成.h.gch文件:

vr-gcc -I. -MMD  -g -mmcu=atmega324pa -Os -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall                                         -fno-exceptions      -c pwm.cpp pwm.h interruptNormal.h
cc1: warning: the "stabs" debug format cannot be used with pre-compiled headers [-Wdeprecated]
In file included from pwm.h:5:0:
interruptNormal.h:8:1: error: unknown type name 'class'
 class InterruptNormal{
 ^~~~~
interruptNormal.h:8:22: error: expected '=', ',', ';', 'asm' or '_attribute_' before '{' token
 class InterruptNormal{
                      ^
pwm.h:7:1: error: unknown type name 'class'
 class Pwm : public InterruptNormal{
 ^~~~~
pwm.h:7:11: error: expected '=', ',', ';', 'asm' or '_attribute_' before ':' token
 class Pwm : public InterruptNormal{
           ^
cc1: warning: the "stabs" debug format cannot be used with pre-compiled headers [-Wdeprecated]
interruptNormal.h:8:1: error: unknown type name 'class'
 class InterruptNormal{
 ^~~~~
interruptNormal.h:8:22: error: expected '=', ',', ';', 'asm' or '_attribute_' before '{' token
 class InterruptNormal{
                      ^
make: * [Makefile:146: pwm.o] Error 1

makefile的一部分(不确定我们可以张贴多少,因为我们想避免抄袭问题):

PRJSRC= $(wildcard *.cpp)
CPPFILES=$(filter %.cpp, $(PRJSRC))
OBJDEPS=$(CPPFILES:.cpp=.o)

%.o: %.cpp
    $(CC) $(CFLAGS) $(CXXFLAGS) -c $^

%.hex: %.out
    $(OBJCOPY) -j .text -j .data \
        -O $(HEXFORMAT) $< $@

谢谢!

c++ inheritance gcc makefile avr
1个回答
0
投票

avr-gcc -I. ... -c pwm.cpp pwm.h interruptNormal.h

您正在编译.h文件,这意味着GCC会为这些文件生成预编译的标头,即.h.gch

大概不是您想要的。从编辑中删除.h文件,并从文件夹中清除.gch文件。

© www.soinside.com 2019 - 2024. All rights reserved.