我在Ubuntu上使用g ++和一个C ++库,其头文件都以.H结尾,而不是传统的.h。
我宁愿不修改include目录......否则我可能只会创建标题的.h版本的符号链接。
我想知道是否有一种简单的方法可以让g ++自动识别.H和.h文件是一样的,这样我就可以在程序中编写header.h或header.H了?我查看了g ++手册页,但是我很难判断它是否支持这样的功能。
答案 0 :(得分:7)
.H是C ++头文件与C头文件(也是.hpp或.hxx)明显命名的一种方式。这仅适用于区分大小写的操作系统。
如果文件有.H,只需#include <file.H>
答案 1 :(得分:3)
问题源于文件系统。您的文件系统区分大小写,因此看到header.h和header.H之间存在差异。这不是g ++问题。在不区分大小写的文件系统/ OS上运行,您将看不到此问题,就像在win32系统上运行g ++一样。
答案 2 :(得分:2)
我认为这是Linux文件系统的实现细节。虽然在Windows上.h和.H文件实际上是相同的,但在Linux上你可以在同一目录中有一个traditional.h和一个传统的。
如果我理解正确,您只需在包含标题的文件中指定大写字母H.
答案 3 :(得分:2)
如果您不想重命名头文件或拥有源#include .H文件,则可以创建一组.h文件,只需#include相应的.H文件。
答案 4 :(得分:2)
我想不出任何简单的方法让gcc变得不区分大小写,所以你可能不得不咬紧牙关并使用替代解决方案,比如
#include "foo.H"
...或创建一些符号链接:
# create .h links to all .H files below the current dir
for basename in `find . -name *.H | sed 's/\(.*\)\..*/\1/'`; do
ln -s $basename.H $basename.h
done
仅供参考,有a recent thread on the gcc mailing list requesting case-insensitivity。响应主要关注效率 - 如果你开始要求编译器查找所有版本的“foo.h”(例如“FOO.H”,“Foo.H”,“foo.H”)那么你将会更频繁地访问磁盘。谁需要更长的构建时间? :)