在C中的#include中转换绝对路径

时间:2011-12-19 06:55:02

标签: c ruby include

我正在尝试获取一些从存储库中获取的代码,以便在我的系统上运行。

在其中一个C文件中,它包含标题的绝对路径:

 #include "/home/user/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/x86_64-linux/ruby/config.h"

由于我的系统上不存在此文件和目录,因此编译源代码失败。

我假设如果我将其更改为指向config.h的个人位置,它将成功但在其他人的系统上失败。

有没有办法指出一些符号链接,系统将使用这个文件的正确位置?处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

将其更改为#include "ruby/config.h",然后将-I/home/user/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/x86_64-linux/(或您的位置)添加到编译器选项中。这告诉预处理器在查找#includes时将该目录添加到要搜索的目录列表中。

要解决可移植性,您可以更改生成makefile的任何内容以将此路径作为选项/参数,或者您可以将其放在makefile顶部的变量中并要求人们更改它:

RUBY_LOCATION = /home/user/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/x86_64-linux/

CFLAGS = -Wall -I${RUBY_LOCATION}