C++跨文件夹包含失败

C++ cross-folder include failing

本文关键字:失败 包含 文件夹 C++      更新时间:2023-10-16

我有一个项目,它有两个源文件夹(main和lib)。它生成一个共享库和一个可执行文件。它目前是这样构建的:

  • 将两个文件夹中的所有文件复制到新的临时文件夹中
  • 运行lib_makefile
  • 运行main_makefile
  • 复制二进制文件
  • 删除临时文件夹

这让我觉得是一种奇怪的做事方式,所以我尝试通过将-I../main添加到lib_makefile中来构建每种方法(反之亦然)。不幸的是,这似乎不起作用。

示例:foo.cpp(在lib中)包括bar.h(在main中),后者包括baz.h(返回到lib中)。

当我试图编译共享库时,它在main/中正确地定位了bar.h,但随后却以"没有这样的文件或目录"为由退出,声称它找不到baz.h,即使baz.h与lib_makefile在同一目录中!

所有include的格式为#include"xxx.h"(即include语句中没有相对路径)。

有办法让它发挥作用吗?我觉得我一定错过了一些显而易见的东西。。

(注:我不能修改#includes,因为其他人仍然在构建它——复制所有东西)

您还应该向库的makefile中添加类似-I../lib的内容(或任何库路径)。

原因是预处理器查找的包含文件与当前文件所在的目录相关,而不是原始的目录。