我正在尝试获取一些从存储库中获取的代码,以便在我的系统上运行。
在其中一个C文件中,它包含标题的绝对路径:
#include "/home/user/.rvm/rubies/ruby-1.9.2-p290/include/ruby-1.9.1/x86_64-linux/ruby/config.h"
由于我的系统上不存在此文件和目录,因此编译源代码失败。
我假设如果我将其更改为指向config.h的个人位置,它将成功但在其他人的系统上失败。
有没有办法指出一些符号链接,系统将使用这个文件的正确位置?处理这种情况的最佳方法是什么?
答案 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}