【发布时间】:2019-09-12 18:51:02
【问题描述】:
我最近一直在学习并熟悉 CMake,希望能够彻底改造工作中的项目以使用它。我知道当我创建一个库目标并将其链接到几个不同的可执行目标时,该库只编译一次。
我发现我可以删除源代码中的#include,同时保留对库的函数调用,并且代码编译和运行都很好。这对我来说似乎是不好的做法,为了便于阅读,我更愿意将#include 保留在库中。但是,如果我保留所有这些#include,是否会为每个单独的可执行文件编译这些库?
【问题讨论】:
-
你能提供一个Minimal Reproducible Example 来证明这种行为吗?
-
不确定你想要什么。 “我希望将#include 保留在库中” -
#include包含 headers,但库是 linked(在 CMake 中使用target_link_libraries命令)。跨度> -
If I keep in all those #includes, will those libraries be compiled for each separate executable?源代码中的预处理器语句#include与库是否已启用编译和/或将与之链接无关。 -
除非内容未被使用,否则不应从代码中省略标头。如果您使用在标头中声明的函数,请使用标头。
-
听起来好像你不确定头文件的用途。它们不仅使 IDE 能够提供自动完成等功能,而且对于正确调用函数至关重要。例如,假设您的代码调用
myfunc(123)。如果没有标头,myfunc 仍将被调用,它将传递包含整数 123 的 4 个字节。如果myfunc被声明为采用整数(这可能是您的代码运行良好的原因),那就没问题了……但是如果myfunc真的需要浮动怎么办?有了标头,编译器就有了正确地将 123 转换为 123.0 的信息。