如果我的项目结构是这样的:
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"
?我想在#include
中module-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批处理等也可以做类似的事情。