我有一个名为code/
的文件夹,在此文件夹下我有一个名为include/
的文件夹和名为code.cc
的源文件,include/
包含头文件{{ 1}},a.h
,这两个头文件也存在于其他地方,为了使用b.h
文件夹中的头文件,我在{{1}中添加了一个标记include/
但是我的代码仍然在其他地方使用这些头文件,如果我以下面的方式包含头文件,我的代码使用-Iinclude
下的头文件,为什么不Makefile
标志更改包含目录?
include/
修改:目录:
-I
生成文件:
#include "include/a.h"
#include "include/b.h"
gcc --version:
code/code.cc
code/Makefile
code/include/a.h
code/include/b.h
答案 0 :(得分:1)
使用此设置:
code/code.cc
code/Makefile
code/include/a.h
code/include/b.h
通过将-Iinclude/
添加到编译器标记,您的#include "include/a.h"
将首先在include/a.h
文件夹中查找include/
。即编译器查找不存在的include/include/a.h
,编译器在搜索路径的其他位置查找include/a.h
文件。
您的代码必须使用#include "a.h"
,或者您的-Iinclude/
必须是-I.
-I。将当前目录添加到搜索路径,以使#include "include/a.h"
与文件./include/a.h
匹配。确保在任何其他搜索路径之前添加-I.
,这也将与您包含的文件匹配。
答案 1 :(得分:0)
-I
gcc
指令的顺序非常重要。 -I
指令在其他地方添加"那些头文件"必须在-Iinclude
/include
之前到来。
答案 2 :(得分:0)
你必须使用
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./
。