c语言 - 使 #include "foo/bar.h" 真正得到"foo/inc/bar.h"



如果我的项目结构是这样的:

project/
  module-X/
    inc/
      x.h
    src/
      x.c
  module-Y/
    inc/
      y.h
    src/
      y.c
  module-Z/
    inc/
      z.h
    src/
      z.cpp

我有CFLAGS += -I$(PROJECT_ROOT_DIR).

有没有办法让我写#include "module-X/x.h"而不是#include "module-X/inc/x.h"?我想在#includemodule-X以获得明确的命名空间,但inc/部分只是噪音。

我的解决方案都有缺陷:

  • 将标头移动到根目录module-X/

    目录
    • 将标头与需要存在的其他内容(例如 makefiles)混合在一起,这些内容可能不像标头那样公开。
  • 将源保留在module-X/inc/module-X/x.h中,添加module-X/inc以包含路径

    • 需要将每个模块添加到CFLAGS,不能很好地扩展。
  • 重构项目,使标题project/inc/module-*/

    • 模块不再是自包含的。

我缺少其他选择吗?

(代码需要使用GCC,Clang和MSVC进行编译)

bash解决方案可以吗?

在目录project...

mkdir includes
for module in module-*
do
    ln -s "${module}/inc" "includes/${module}"
done

然后将project/includes添加到包含路径。

CMake,DOS批处理等也可以做类似的事情。

相关内容

  • 没有找到相关文章

最新更新