-2

如果我在第 1 行有错误,并且我注释掉了整个 H 文件,它并不总是......更新?

它似乎正在编译 .h 文件的过去版本,但如果我故意在 main.cpp 文件中放入错误,那么它会意识到 h 文件中有错误。此外,它有时会显示仅在 h 文件中的错误,但如果是经过一段时间后,则会显示 idk

我只是尝试将我的代码放在附加到标题的 cpp 文件中,但问题是我见过的最丑陋的错误,我宁愿它都留在标题中,因为它只会像15行代码。

这是我正在使用的makefile,以防有一些奇怪的事情导致延迟..但我之前只使用原始的“g++ *.h *.cpp”命令就遇到了这个问题,所以这可能不是问题. 我已经为这个问题苦苦挣扎了很长时间,因此不得不将我的最后一个硬件任务全部放在一个文件中

MAINPROG=assignment01
CC=gcc
CXX=g++
CPPFLAGS=-g -std=c++11
LFLAGS=
CFLAGS=-g
TARGET=$(MAINPROG)
CPPS=$(wildcard *.cpp)
LINK=g++ $(CPPFLAGS)
OBJS=$(CPPS:%.cpp=%.o)

%.o: %.cpp
    $(CXX) $(CPPFLAGS) -MMD -o $@ -c $*.cpp


all: $(TARGET)  



$(TARGET): $(OBJS)
    $(LINK) $(FLAGS) -o $(TARGET) $^ $(LFLAGS)

clean:
    -/bin/rm -rf *.d *.o $(TARGET)
4

1 回答 1

0

正如 πάντα ῥεῖ 所说,直接编译头文件是不正常的。当它们被包含到 cpp 源中时,它们被合并到编译中。

您的 makefile 也不与库 stdc++ (libstdc++.a) 链接。我不知道在与 g++ 链接时这是否是一个问题,但它总是对我来说是 gcc。

哦,rm -rf要清理!这是相当激进的,也许rm -f会更好,以防万一有人不小心把/..作为目标。

我认为你应该先在命令行上编译,然后用你的makefile来解决问题。发布您的代码副本可能值得。

通常我会编译简单的代码:

gcc -g -Wall -o assignment01 assignment01.cpp -lstdc++

这给出:一个名为“assignment01”的 exe,带有调试信息、所有警告以及与 c++ 标准库的链接。

于 2018-09-20T00:19:26.367 回答