【发布时间】:2015-08-10 03:00:53
【问题描述】:
我在我的个人 Ubuntu 15.04 机器上开发一个 C++ 程序,最终必须在 openSUSE 13.1 上运行。为了让它在两个系统上都能正常工作,我仔细选择了要使用的库和版本。
现在我遇到了包含问题。我想使用 Qwt 6,它在两个发行版上都可用。但是,头文件的位置不同。在 Debian 上,它们位于 /usr/include/qwt/qwt_*.h,但在 openSUSE 上,它们位于 /usr/include/qwt6/qwt_*.h。我的代码目前有#include <qwt/qwt_plot.h>。这在 openSUSE 上不起作用,因为我必须在其中插入 6。
我目前看到的最简单的解决方案是使用 CMake 包含任一目录,然后在源代码中编写 #include <qwt_plot.h>。但是,我认为这不是一个非常好的解决方案,因为/usr/include 的那些子目录是用来提供命名空间的。只需将所有目录添加到包含路径中,就会将它们混合在一起,甚至可能导致冲突。
有什么好办法解决这个问题吗?
公平地说:这是为了一个我有报酬从事的项目。
【问题讨论】:
-
你可以用符号链接做一些技巧,例如。你使用哪个编译器?也许这将有助于定义编译器要使用的目录,然后从 #include
-
或者你可以用预处理器做一些相当丑陋的事情,如那里所示:stackoverflow.com/questions/3178946/…
-
@Marged:符号链接需要对
/usr/include目录的root 访问权限,我不想强迫他们为此给我。我在两个发行版上都使用 g++,在 Ubuntu 上使用 4.9,在 openSUSE 上使用 4.8。与<qwt_plot.h>相比,这些宏看起来并没有改进。 -
宏将允许您指定要在头文件前面使用的前缀。符号链接也可以在您运行 cmake 的目录中创建:创建一个名为“pointertoqwtinclude”的符号链接,并将其指向 /usr/include 目录。然后只需 #include "pointertoqwtinclude/stuff.h"
-
@Marged:符号链接技巧要么要求我将符号链接的目录(在
~中的某处)添加到<…>搜索路径,要么将这些文件包含在"…"中。两者对我来说都像是一个黑客:-/.
标签: c++ cmake header-files include-path