C++跨文件夹包含失败
C++ cross-folder include failing
我有一个项目,它有两个源文件夹(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
的内容(或任何库路径)。
原因是预处理器查找的包含文件与当前文件所在的目录相关,而不是原始的目录。
相关文章:
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 包含模板文件的递归会导致编译失败
- 包含 libpqxx 会导致使用 CMake 在 WSL 上生成失败
- Android Studio 链接器命令在包含 Boost 库时失败
- 在 Windows 上,stat 和 GetFileAttributes 对于包含奇怪字符的路径失败
- Visual Studio 2013 标头包含失败
- Windows 套接字和身份验证构建在包含 Poco-Library 时失败
- 使用相对标头包含路径重新分析 ASTUnit 失败
- TFS 2018 生成失败:无法打开包含文件"afxres.h"
- 使用 glibc 2.7 包含路径编译失败
- std::list::merge() 对于包含对象的列表失败
- 节点构建失败。无法在包含目录的子目录中找到库头文件
- 将库安装到编译中未包含的路径后,编译失败
- 为什么结构make_unique在包含 std::p romise 作为成员时失败?
- Qt 窗口包含提升线程标头失败
- C++跨文件夹包含失败
- 如果插槽对象包含互斥锁和条件变量,则 Boost signals2 connect() 调用编译失败
- 在项目c++中包含本地路径,但生成失败
- cuda标头包含失败
- 最终链接失败:包含 windows.h 时参数无效