我有一个项目,它有两个源文件夹(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
的内容(或任何库路径)。
原因是预处理器查找的包含文件与当前文件所在的目录相关,而不是原始的目录。