C 生成文件头包括
我正在为一个旧项目开发一个Makefile。新的Makefile基于我在其他项目中成功使用的旧Makefile,但现在我面临一个奇怪的问题 我的项目具有以下形式:C 生成文件头包括,c,gcc,makefile,C,Gcc,Makefile,我正在为一个旧项目开发一个Makefile。新的Makefile基于我在其他项目中成功使用的旧Makefile,但现在我面临一个奇怪的问题 我的项目具有以下形式: ├── Makefile └── src ├── folder1 │ ├── somefiles.c │ └── somefiles.h ├── folder2 │ ├── problematic.h │ ├── somefiles.c │ ├── somef
├── Makefile
└── src
├── folder1
│ ├── somefiles.c
│ └── somefiles.h
├── folder2
│ ├── problematic.h
│ ├── somefiles.c
│ ├── somefiles.h
│ └── subdir
│ └── included_file.h
└── folder3
├── somefiles.c
└── somefiles.h
我的Makefile包含以下行:
LIBRARY_INC_PATHS = $(addprefix -I, $(shell find . -name '*.h' -printf '"%h"\n' | sort -u))
文件problem.h
中有一行:
#include "subdir/included_file.h"
这会引起麻烦。GCC说没有这样的文件或目录
如果我将其更改为:
#include "included_file.h"
问题消失了,但在我的情况下,这不是一个可接受的解决方案
我应该对makefile进行哪些修改,以便使用相对路径(而不仅仅是名称)包含C代码中的文件?您有多少个文件夹?仅仅显式地命名include目录而不是find调用会不会太费力?是的,实际项目有几十个文件。明确列出所有目录是不现实的。老实说,剧烈的更改(需要更改整个列表,而不是简单的添加)不太可能发生。所以这似乎不仅仅是一次性的努力,你可能是对的。但现在这主要是一件好奇的事情,为什么这么明显的事情(对我来说)不起作用?我真的很困惑。无论您传递给编译器的是什么
-I..
标志,相对标题都应该有效,除非您的有问题.h
有一些软/硬链接从不同的位置指向它,其中subdir
不存在,并且您意外地包含了它。我无法重现错误。如果我使用-Isrc/folder2
,它可以工作。(我使用的是gcc 4.2.1)您有多少个文件夹?仅仅显式地命名include目录而不是find调用会不会太费力?是的,实际项目有几十个文件。明确列出所有目录是不现实的。老实说,剧烈的更改(需要更改整个列表,而不是简单的添加)不太可能发生。所以这似乎不仅仅是一次性的努力,你可能是对的。但现在这主要是一件好奇的事情,为什么这么明显的事情(对我来说)不起作用?我真的很困惑。无论您传递给编译器的是什么-I..
标志,相对标题都应该有效,除非您的有问题.h
有一些软/硬链接从不同的位置指向它,其中subdir
不存在,并且您意外地包含了它。我无法重现错误。如果我使用-Isrc/folder2
,它可以工作。(我使用的是gcc 4.2.1)