【问题标题】:g++ does not recognize include directoryg++ 不识别包含目录
【发布时间】:2016-08-09 12:59:20
【问题描述】:

已解决:我不完全确定为什么以及如何,但是当我从 -I~/dlib-18.18 更改为 -I../dlib-18.18 时,它就可以工作了。

我正在尝试编写一个使用 dlib 库编译程序的 makefile。我已经下载并安装在根目录下的库。

.cpp文件头如下:

#include "dlib/optimization.h"
#include <iostream>

dlib 文件夹包含在 dlib-18.18 中, optimization.h 确实在 dlib 文件夹中。

下面是我的makefile(或其中的一部分)。我已将相关目录包含在 CFLAGS 中。但是,在编译过程中,g++ 说找不到 optimization.h (No such file or directory)

EXUCUTABLE = graph

CXX = g++
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic

############### Rules ###############

all: ${EXUCUTABLE}

clean:
    rm -f ${EXUCUTABLE} *.o
## Compile step (.cpp files -> .o files)

%.o: %.cpp
    ${CXX} ${FLAGS} ${CXXFLAGS} -c $< 

graph: graph.o
    ${CXX} ${FLAGS} $^ -o $@

Output for terminal make

The /dlib-18.18/dlib folder when accessed from the terminal

【问题讨论】:

  • 您提到了.cpp,但有规则%.o: %.c。这不应该是%.o: %.c %.cpp 还是设置CXXFLAGS
  • 所以标题的路径是/dlib-18.18/dlib/optimization.h?这在两个方面看起来很奇怪,其中一个可能是错误的。可能错误的是您将库的标头位于根目录的特殊文件夹中。你确定你的意思不是/usr/include/dlib-18.18./dlib-18.18 或其他什么?其次,标头是否存储在dlib-18.18dlib 子目录中,还是您的意思是#include "dlib-18.18/optimization.h"

标签: c++ makefile g++ dlib


【解决方案1】:

您的模式错误:%.o: %.c 表示规则是关于编译 .c 文件(不是 .cpp 文件)。

因此,此规则不适用,GNU Make 会退回到自己的一组默认规则来编译您的 C++ 代码。

试试这个(假设您与 dlib 一致,并且您对 C++ 文件使用 .cpp 扩展名):

CXX = g++
CXXFLAGS = -I. -I/usr/include/ -I~/dlib-18.18
FLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c++11 -pedantic

# To get *any* .o file, compile its .cpp file with the following rule.
%.o: %.cpp
    $(CXX) $(FLAGS) $(CXXFLAGS) -c $<

现在运行 make -B 并观察 g++ 命令行上 -I~/dlib-18.18 选项的编译器输出。

【讨论】:

  • 感谢您指出这一点。但是,将 .c 更改为 .cpp 后,我仍然遇到相同的错误(找不到目录/文件)
  • 您可以编辑您的问题并复制/粘贴make 的输出吗?
  • make 的输出不是很有帮助,只是大喊找不到文件
  • 好的,我看到-I~/dlib-18.18,这意味着g++正在你的主目录中寻找dlib,而不是你之前所说的在根目录中。将 -I 路径设置为库的安装位置,应该没问题。
  • 好的,我刚刚意识到您正在尝试使用 gcc 而不是 g++ 编译 graph.cpp。你也必须纠正它。 (所以是的,输出很有帮助:-)
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多