c++ - 头文件编译成目标文件?

标签 c++ c header makefile

下面是我的 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/

相关文章:

html - 如何在一个div中对齐2个div?

c++ - 如何将程序集 list 文件添加到使用 NetBeans IDE C++ MinGW 创建的 .exe 文件中

C错误: expression must have arithmetic or pointer type while accessing union member within structure

c - 如何检查套接字是否在c中使用,以在单个套接字上同时执行多个写入

C 程序在给字符串赋值后崩溃

c++ - 在文件中间#include 是好习惯吗?

UITableView 隐藏标题?

c++ - Lua API 推送用户数据

c++ - 删除变量赋值的重复行

c++ - 在 Mavericks 上使用 CUDA 编译 OpenCV 2.4.9