1

我有一个项目,它有两个源文件夹(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 "xxx.h" 格式(即在包含语句中没有相对路径)。

有没有办法让它工作?我觉得我一定错过了一些明显的东西..

(注意:我无法修改#includes,因为其他人仍然以复制一切的方式构建它)

4

1 回答 1

5

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

这样做的原因是预处理器查找相对于当前文件所在目录的包含文件,而不是原始文件所在的目录。

于 2012-08-28T08:52:48.783 回答