下面是我的 Makefile 的一个片段。我在某处读到头文件永远不应该自己编译(即没有 .c 或 .cpp 文件),但下面似乎有效并且我得到了一个 constants.o
文件。这个文件有什么用吗?如果我使用 C++ 模板会怎样:我是否仍应避免编译 .h 和 .tcc 文件?
CXX = g++
CXXFLAGS = -Wall -c -std=c++11
SRC_DIR = src
TARGET_DIR = Debug
main: constants.o
constants.o: \
$(SRC_DIR)/util/constants.h
$(CXX) $(CXXFLAGS) -o $(TARGET_DIR)/$@ $<
最佳答案
文件名实际上是任意的。
如果你说你的头文件实际上是编译器应该编译的翻译单元,它会遵循命令。
但是违反约定会受到严厉的惩罚,因为它会让其他人(以及 5 分钟后的 future 的自己)感到困惑;因此,不要无谓地这样做,这里也没有必要。
顺便说一句:单独编译头文件有一个用途,那就是确保它们是独立的。
尽管如此,这应该是不必要的,因为每个头文件都有一个实现文件,其中无论如何都在第一行包含它的头文件,对吧?
关于c++ - 头文件编译成目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27455267/