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

Sjo*_*888 5 c++ linux c-preprocessor

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

在我的例子中,它是来自cfitsio的fitsio.h,它位于OpenSUSE 12.1中:

#include <cfitsio/fitsio.h>
Run Code Online (Sandbox Code Playgroud)

在Arch Linux中:

#include <fitsio.h>
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*kiy 7

保持简单包括

#include <fitsio.h>
Run Code Online (Sandbox Code Playgroud)

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

/path/to/header/cfitsio
/path/to/header
Run Code Online (Sandbox Code Playgroud)

即使前者在Arch上不存在,也不会在编译期间导致任何问题.

  • 这种方法的主要问题是它**会导致更大的构建问题.特别是,当文件查找失败时,它将导致编译速度变慢.但是,通常可以通过在makefile中有条件地设置这些路径来解决这个问题.这里的想法是你在一个地方,而不是在每个源文件中,每个makefile解决一次问题. (3认同)