【发布时间】:2020-10-12 13:08:47
【问题描述】:
有没有办法以与目标包含目录相同的方式添加文件,但针对单个文件?
我的用例是这样的。我使用了很多模板和概念,而且我的头文件变得越来越庞大。我真的很喜欢将实现与定义分开,所以想要这样的东西:
.h 文件
template <typename T>
T foo(T bar);
#include <name_of_implementation_file>
实现.h文件
template <typename T>
T foo(T bar) { return bar; };
当前包含必须如下所示:#include "path/to/implementation_file_name"
这很烦人,因为它让以后的重构变得很痛苦。我也不想添加只有 1 或 2 个文件的额外目录并调用 target_include_directories。我不想只是include,因为我的项目是一个库,我不希望用户能够包含实现文件。我也在构建多个目标,并希望将它们包含的文件分开。
【问题讨论】:
-
首先,你不应该
#includecpp文件。 -
对于模板,你不需要头文件本身的完整定义吗?您可以保留 .cpp 文件,但它基本上是空的。
-
@0x5453 当然可以,所以假设实现文件是另一个头文件
-
@squareskittles 我在头文件的底部包含了实现,所以它仍然是完整的,可以编译+链接
-
创建一个目录。将文件复制到该目录。添加该目录以包含路径。 |无论如何,只需将实现与标题保持在同一目录中并包含文件名。
and I don't want the user to be able to include the implementation files您是否在源文件中实例化模板?很可能不是,这使得它不可能 - 用户使用模板,他必须看到实现......