【问题标题】:Header search paths with gcc using C_INCLUDE_PATH使用 C_INCLUDE_PATH 的 gcc 标头搜索路径
【发布时间】:2013-03-14 03:44:09
【问题描述】:

我对以下包含文件(使用 GCC)感到困惑

我在文件夹 AAA 中有 A.c 和 B.c

和 B.h 在 BBB 文件夹中

在交流中:

#include <stdio.h>
#include "B.h"

main()
{
    errPrint();
}

在卑诗省:

#include <stdio.h>
#include "B.h"
void errPrint(void)   
{
    printf("err info\n");
}

在 B.h:

#ifndef _B_H
#define _B_H
void errPrint(void);
#endif

现在我运行命令:

#gcc -I /BBB A.c B.c -o exeobj

没关系。 但是我必须使用“-I”来指定标题似乎有点无聊 其他文件夹。 所以我编辑我的“/etc/profile”文件并添加了

C_INCLUDE_PATH=/BBB  
export C_INCLUDE_PATH

指定头文件夹,然后

echo $C_INCLUDE_PATH

它显示了正确的路线。 但是当我编译时:

#gcc -c A.c B.c

错误显示:

error: B.h: No such file or directory

我不知道哪里出错了,任何人都有线索,欢迎任何建议。

注意:我是新手,还不能使用 Makefile...

【问题讨论】:

  • 我设置了你上面描述的结构并用 gcc 4.7.2 进行了尝试,它按预期工作。因此,我认为您尝试做的事情没有任何根本性的问题,但我不确定为什么它不适合您。
  • 这对我也很有效。您是否尝试过在命令行中定义环境变量?我想不出一个 shell 不执行 /etc/profile 的原因,但是试试export PATH=\BBB; gcc -c A.c B.c
  • 呃,我错了你的意思,你的意思是'export CPATH=\BBB',而不是'export PATH=\BBB'对吗?
  • 运行export | grep C_INCLUDE会得到什么?
  • 它显示了我包含的正确位置,'declare -x C_INCLUDE_PATH="/home/workspace/routine/include'。

标签: c gcc header include-path user-profile


【解决方案1】:

在交流中:

#include <stdio.h>
#include <B.h>

main()
{
    errPrint();
}

在卑诗省:

#include <stdio.h>
#include <B.h>
void errPrint(void)   
{
    printf("err info\n");
}

如果要使用#include "file.h",你必须指定路径示例:"/BBB/B.h"

有关更多信息,您可以阅读In the C standard 第 6.10.2 节第 2 至第 4 段。

编辑:测试后。请尝试一下。

echo -e "C_INCLUDE_PATH=/BBB\nexport C_INCLUDE_PATH" >> ~/.bash_profile

source ~/.bash_profile

现在

gcc A.c B.c

祝你好运:)

【讨论】:

  • 我认为这实际上不应该有所作为。 "" 和 之间的区别在于,"" 也首先搜索当前目录,但之后它们都回退到相同的搜索算法。不过,我以前从未尝试过使用 C_INCLUDE_DIR....
  • GCC 手册backs up rra 的声明。
  • @Quentin Perez:您引用的第 6.10.2 节明确表示,在#include "foo.h" 的情况下,该文件“以实现定义的方式搜索”。
  • 在使用变量 C_INCLUDE_PATH 进行测试后,我的 file.h 也没有找到。
  • gcc在#include中处理""的实现方式定义的方式是先搜索与C源文件相同的目录,然后回退到正常的路径上。
猜你喜欢
  • 2015-07-02
  • 2011-03-26
  • 1970-01-01
  • 2023-03-18
  • 2015-01-24
  • 1970-01-01
  • 2013-07-13
  • 2020-05-03
  • 2023-03-23
相关资源
最近更新 更多