Jef Driesen wrote:
If your headers use the libfoo/header.h style, your users must, too. That's not consistent with your wish above.

Why is that necessary? Isn't the toplevel directory (where the libfoo/header.h is located) also included, even if the user is using a <header.h> include style? Or is that only true if the headers are installed in the standard /usr/include location?

There's nothing preventing one of your users from installing 'libfoo' other than under one of the standard system include directories. If someone did that, #include "header.h" will still work, but #include <libfoo/header.h> will only work if you give a -I flag to the compiler, giving the parent directory holding 'libfoo'.

This is a usability matter, not a works/doesn't work matter.

I also checked a number of libraries on my system (cairo, gtk, just to name a few), and none of them has "header.h" includes. They all have <header.h> includes, with a few exceptions that have <libfoo/header.h> includes (openssl for instance). Is there another reason for that?

As Bob said, the C and C++ standards are vague on this matter. You should try both and see how the compilers you use actually behave.

I maintain a free library myself (http://tangentsoft.net/mysql++/), and what I'm telling you comes from my experience with these very issues. We dealt with all this stuff years ago in MySQL++. We found that using double quotes for "peer" header includes works reliably across all compilers we target, where we had problems with angle bracket includes. MySQL++ targets several Windows compilers, which may be relevant here. If your library will live a more sheltered existence, you might get away with angle brackets.


Reply via email to