如何在不同的Linux发行版上处理不同的头文件位置?

时间:2014-12-30 14:09:16

标签: c++ linux c-preprocessor

在我的代码中,我使用了一个头文件,不幸的是,它在不同的Linux发行版下具有不同的位置。

在我的情况下,来自cfitsio的fitsio.h,它位于OpenSUSE 12.1中:

#include <cfitsio/fitsio.h>

在Arch Linux中:

#include <fitsio.h>

我想我可以使用一些预处理器指令来创建一个开关。我可以用它来测试我是在Linux还是Windows等,但我不知道我可以用来测试我是否在Arch Linux上。

还是有另一种方法/策略来处理这种情况吗?

2 个答案:

答案 0 :(得分:7)

保持简单包括

#include <fitsio.h>

然后,在其他包含目录下,列出包含此标头的目录的路径,包括SUSE和Arch:

/path/to/header/cfitsio
/path/to/header

即使前者在Arch上不存在,也不会在编译过程中导致任何问题。

答案 1 :(得分:2)

某些库附带了一个[libraryname]-config程序,该程序在当前平台上针对该库进行编译时输出正确的编译器标志。

例如,libncurses&#39; ncursesw5-config --cflags --libsArch上生成此内容:

-L/usr/lib -lncursesw

Debian

-I/usr/include/ncursesw
-lncursesw -ltinfo

在C代码中使用#include <curses.h>就足够了,并且可以在两个发行版中正确编译。