gcc -I 不更改包含目录
gcc -I doesn't change the include directory
我有一个名为 code/
的文件夹,在这个文件夹下我有一个名为 include/
的文件夹和名为 code.cc
的源文件,include/
包含头文件a.h
、b.h
,这两个头文件也存在于别处,为了使用include/
文件夹中的头文件,我在我的Makefile
,但是我的代码在其他地方仍然使用那些头文件,如果我按照下面的方式包含头文件,我的代码使用include/
下的头文件,为什么-I
标志更改包含目录?
#include "include/a.h"
#include "include/b.h"
编辑:目录:
code/code.cc
code/Makefile
code/include/a.h
code/include/b.h
生成文件:
CFLAGS = -Iinclude/
CFLAGS += -m32
LDFLAGS = -Llib -llits -lrt -lpthread -Wl,-R,'lib'
code:code.cc
gcc -o code $(CFLAGS) $(LDFLAGS) code.cc
gcc --version:
gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-I
指令到 gcc
的顺序很重要。添加 "those header files in other places" 的 -I
指令必须在 -Iinclude
之前出现 /include
。
你必须使用
CFLAGS = -I<full_path_to_project>/code
如果 include
位于此目录下,并且您在 include 语句中包含与它相关的文件
#include "include/a.h"
// ^^^^^^^^^
如果指定
CFLAGS = -I<full_path_to_project>/code/include
您不需要指定相对包含路径
#include "a.h"
用 -I
指定的相对路径将从 make
使用的工作目录开始。如果那里没有相对路径部分,则省略 -I
选项,或指定 -I./
.
使用此设置:
code/code.cc
code/Makefile
code/include/a.h
code/include/b.h
并且通过将 -Iinclude/
添加到编译器标志,您的 #include "include/a.h"
将首先在 include/
文件夹中查找 include/a.h
。即编译器查找不存在的 include/include/a.h
,编译器在搜索路径的其他地方查找 include/a.h
文件。
您的代码要么必须使用 #include "a.h"
,要么您的 -Iinclude/
必须是 -I.
-I。将当前目录添加到搜索路径,这样 #include "include/a.h"
将匹配文件 ./include/a.h
确保 -I.
被添加到任何其他搜索路径之前,这些搜索路径也将匹配您包含的文件。
我有一个名为 code/
的文件夹,在这个文件夹下我有一个名为 include/
的文件夹和名为 code.cc
的源文件,include/
包含头文件a.h
、b.h
,这两个头文件也存在于别处,为了使用include/
文件夹中的头文件,我在我的Makefile
,但是我的代码在其他地方仍然使用那些头文件,如果我按照下面的方式包含头文件,我的代码使用include/
下的头文件,为什么-I
标志更改包含目录?
#include "include/a.h"
#include "include/b.h"
编辑:目录:
code/code.cc
code/Makefile
code/include/a.h
code/include/b.h
生成文件:
CFLAGS = -Iinclude/
CFLAGS += -m32
LDFLAGS = -Llib -llits -lrt -lpthread -Wl,-R,'lib'
code:code.cc
gcc -o code $(CFLAGS) $(LDFLAGS) code.cc
gcc --version:
gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-I
指令到 gcc
的顺序很重要。添加 "those header files in other places" 的 -I
指令必须在 -Iinclude
之前出现 /include
。
你必须使用
CFLAGS = -I<full_path_to_project>/code
如果 include
位于此目录下,并且您在 include 语句中包含与它相关的文件
#include "include/a.h"
// ^^^^^^^^^
如果指定
CFLAGS = -I<full_path_to_project>/code/include
您不需要指定相对包含路径
#include "a.h"
用 -I
指定的相对路径将从 make
使用的工作目录开始。如果那里没有相对路径部分,则省略 -I
选项,或指定 -I./
.
使用此设置:
code/code.cc
code/Makefile
code/include/a.h
code/include/b.h
并且通过将 -Iinclude/
添加到编译器标志,您的 #include "include/a.h"
将首先在 include/
文件夹中查找 include/a.h
。即编译器查找不存在的 include/include/a.h
,编译器在搜索路径的其他地方查找 include/a.h
文件。
您的代码要么必须使用 #include "a.h"
,要么您的 -Iinclude/
必须是 -I.
-I。将当前目录添加到搜索路径,这样 #include "include/a.h"
将匹配文件 ./include/a.h
确保 -I.
被添加到任何其他搜索路径之前,这些搜索路径也将匹配您包含的文件。