【发布时间】:2020-06-14 13:25:11
【问题描述】:
我正在使用 C++17 编写一个仅包含标头的库。我想将它包含在一个“虚拟”源文件中:
#include "my/library.h"
// EOF
目的是确保库正确包含其所有依赖项。我还想在其上运行静态分析器,并在启用尽可能多的编译器检查的情况下对其进行编译。
要创建一个正常的可执行目标,我需要添加main() 函数,否则链接阶段将失败。
我想我也可以创建一个静态库目标,它应该可以正常工作,尽管它会创建一个我不需要的工件。
还有其他选择吗?
【问题讨论】:
-
即使您创建了一个库,您也必须从具有 main 的程序加载它(或从另一个库加载,该库将由具有 main 函数的 exec 加载)。我不明白你的问题
-
也许只是添加单元测试,所以库被编译为副作用。
-
我需要验证库中的代码:a) 没有丢失的包含,b) 编译干净且没有警告,c) 通过静态分析。这些检查都不需要构建可执行文件。
-
我确实有单元测试。事实上,我在 TDD 中使用严格的红绿重构周期开发库。我不希望编译作为副作用。我希望它作为(几乎)唯一的目的,这就是为什么我想要一个单独的目标。
-
您可以告诉 CMake 将其构建到 Object library 中,基本上只是
.o或.obj目标文件。使用这个:add_library(MyObj OBJECT library.cpp),其中library.cpp是您的虚拟源文件。
标签: c++ cmake compilation header-only