在我开始之前,请耐心等待我,我对cpp很新,没有接受过正式培训,这个问题可能已经被问过并已经回答了,但我不知道该怎么称呼。
所以我有一个cpp程序,我想在这里使用这个开源google sling包。我的google sling包与main.cpp程序在同一个目录中,我可以包含一个带有相对路径的头文件该程序,但该标头(A)调用包中的其他标头(B :),并且这些标头(B :)的相对路径与该标头(A)文件无关。这是错误堆栈:
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ g++ -Isling main.cpp
In file included from main.cpp:7:0:
sling/frame/object.h:25:10: fatal error: sling/base/logging.h: No such file or directory
#include "sling/base/logging.h"
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ ls
bin obj test_project.cbp test_project.layout
main.cpp sling test_project.depend text_testfiles
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ vim main.cpp
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ cd sling/base
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project/sling/base$ ls
bitcast.h flags.cc libinit.cc port.h status.cc types.h
BUILD flags.h logging.cc registry.cc status.h
clock.cc init.cc logging.h registry.h strtoint.cc
clock.h init.h macros.h slice.h strtoint.h
所以sling/base/logging.h
实际上存在,但是因为它是从sling/frame/object.h
调用的,所以正确的相对路径是../base/logging.h
(至少我的有限知识告诉我)。我想我必须设置它,以便它是我的cpp编译器搜索依赖关系的全局路径的一部分。无论哪种方式,我都做了一些非常错误的事情。
我正在寻找半快速解决方案,但我也希望将来避免这种情况,因此非常感谢您提供相应信息的链接。
编辑:
也试过同样的错误:
g++ -I.sling main.cpp
g++ -Itest_project main.cpp
g++ -isystem sling main.cpp
g++ -iwithprefixbefore "/home/.../test_project/" main.cpp
其中......是从家到我的测试项目的路径
答案 0 :(得分:0)
谢谢melpomene,正确的答案是g++ -I. main.cpp
。案件结案。
感谢Jerry Jeremiah对此信息的评论:
#include <x>
说&#34;包含来自包含路径的文件&#34;并且#include "x"
说&#34;包括当前目录中的文件&#34;
因此,我的程序调用了头文件&#34; sling / base / logger.h&#34;来自目录&#34; sling / frame /&#34; (这是最初被称为&#34; sling / frame / object.h&#34;生活的地方)并且由于显而易见的原因无法在那里找到它。