问题标签 [header-only]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
90691 浏览

c++ - 在 CLion 中,仅标头库:文件“不属于任何项目目标,代码洞察功能可能无法正常工作”

我有一个使用 cmake 命令设置的仅标头库项目:

我还添加了

但是当我打开源文件时,我收到警告:

此文件不属于任何项目目标,代码洞察功能可能无法正常工作

我失去了很多代码完成等功能。

设置它的正确方法是什么,以便 CLion 在仅标头库上提供其常用功能?

0 投票
0 回答
2078 浏览

c++ - CMake将单个头文件添加到项目

我特别想将 stb_image_write.h 添加到我的项目中,但是在使用 CMake 编译时出现“多重定义”错误。

我将 stb_image_write.h 包含在一个名为“screen.h”的头文件中,包含如下:

然后,我将此标头包含到 cpp 文件中,如下所示:

这是我的 CMake:

文件位置与 CMakeLists.txt 位于同一目录中,但我也在 /src 文件夹中尝试过,但没有运气。

0 投票
2 回答
3054 浏览

c++ - 如何在自己的仅标头库中包含提升标头

我正在使用 Jetbrains CLion 2017.3 和捆绑的 CMake 版本 3.9.6 和 mingw64 5.0 版本/g++ 7.1。虽然阅读了“掌握 CMake”(我是 CMake 的新手!),但我在理解基础知识方面有很多困难。从 3 天开始,我一直在寻找一个 CMake 解决方案来创建一个自己的使用 boost (1.66.0) 库的仅标头库。

使用我的 CMakeLists.txt 可以找到 boost 库,但我不能在当前源目录的头文件中包含 boost 头文件。

我当前的源目录包含“CMakeLists.txt”和头文件“test_boost.h”。如果我尝试在头文件“test_boost.h”中包含 boost 头文件,则找不到 boost 头文件!

我做错了什么?

我的 CMakeLists.txt :

0 投票
1 回答
872 浏览

c++ - 将仅标头库包含到产生链接器错误的多个文件中

我正在使用仅标题的单文件“库”将.obj-models 从文件加载到图形程序中。弹出了一个简单的链接器错误:

LNK2005 “此处的信息”已在 main.obj 中定义

现在我知道这意味着什么,通常我会继续将实现移动到一个单独的文件中。然而,这是一个比我聪明的人提供的文件,所以依靠权威,我希望这件事能奏效。

它只抱怨向量乘法运算符重载和其他函数负载中的单个函数:

这些功能有什么特别之处吗?

该文件来自OBJ Loader,我对其进行了修改以使用glm我目前在其他地方使用的向量和实用程序。

0 投票
1 回答
3818 浏览

python - 使用 Python 安装仅标头库

我有一个仅在我的 Python 扩展中使用的标头 C++ 库。我希望能够将它们安装到 Python 的包含路径中,这样我就可以使用python3 setup.py build. 我有部分能力,但有两件事我无法工作(见下文):

  1. 如何使用python3 setup.py install安装头文件?目前我只得到一些*.egg文件,但没有安装头文件。

  2. 如何保留模块的文件结构?当前文件结构被错误地展平。

什么有效

与以下setup.py

我可以将模块上传到 PyPi:

然后使用 pip 安装它:

然后在我的系统上找到标题here

当我用 Python 编译扩展时可用。

如何使用“python3 setup.py install”?

使用这种策略我不能简单地运行

在这种情况下so*.egg,安装了一些,但头文件没有存储在编译器可用的地方。

如何保留文件结构?

当模块有点复杂,并且有一些目录层次结构时,我也会遇到问题。对于以下setup.py

问题是标头安装到

从而使原始文件结构变平。

如何解决这两个问题?

0 投票
2 回答
645 浏览

c++ - 在项目中仅使用 CGAL 4.12 标头

我正在使用需要 CGAL 库的 CLION 使用 C++ 编写一个类项目,但我无法让该库与我的项目一起使用。

为简单起见,我们正试图让该库在它的仅标头配置中工作,但是当涉及到这种处理方式时,CGAL 的文档在细节上有点薄。在安装文档的这一部分中,我们被告知在某处提取 CGAL 库数据并在我们的 cmake 文件中的变量中引用它。然而,我们似乎无法在我们的项目中引用任何 CGAL 的头文件——根本找不到任何目录或文件。

我们已经尝试自己解决了一段时间,但我们真的不知道去哪里寻找或问题出在哪里,而且 CGAL 的文档也没有太大帮助。下面我附上了我们的 CMakeLists 文件内容,我们做错了什么还是应该做的?

任何帮助将不胜感激,我们已经为此苦苦挣扎了一段时间并且不知所措。提前致谢!

0 投票
2 回答
722 浏览

c++ - 我可以 automoc 继承 QObject 的仅标头对象吗?

我对 Qt 比较陌生,我正在将它整合到我们的项目中。我做了一个非常小的对象,它继承了我只与计时器一起使用的 QObject。我为它创建了一个仅头文件,但很快意识到编译器不喜欢它。所以我为它创建了一个免费的 .cpp 文件来消除错误,它似乎可以工作。

我的问题是真的,我可以创建一个仅继承 QObject 的标头对象并允许它自动进行吗?还是我每次都需要创建一个免费的 cpp 文件?

我已经生成了少量的代码来复制,这表明了我的意思。

CMakeLists.txt

主文件

头文件.h

输出

当然,将这个Header.cpp添加到源中将消除错误:

0 投票
0 回答
159 浏览

c++ - 使用仅头文件库的 Cpp 编译技术

在编译包含仅标头库 (tiny-dnn) 的项目时,我注意到我的可用内存下降到零(从 12GB)。接下来是系统冻结。这似乎主要发生在存在编译或链接器错误(尤其是链接器错误)时。这发生在交换打开或关闭时。

是否有技术可以更有效地使用内存,或者可能使用更少的递归或其他东西。

我正在使用 gcc7+ubuntu14.04 的默认链接器(尚未检查,但明天会检查)和 CMake + Ninja 构建工具。也许有一些有用的编译或链接标志可以使用?假设我此时使用的是最低限度。也许切换到 clang 编译器或黄金链接器会有所帮助?

0 投票
1 回答
1690 浏览

cmake - CMake:如何处理同一库的多个版本?

在我的项目中,我使用的是仅标头库 rapidjson v1.1.0。

现在的问题是tiny-dnn也包含了 rapidjson(但版本较旧),所以当我尝试在主 CMakeLists.txt 中包含 tiny_dnn 时,就像include_directories(${PROJECT_SOURCE_DIR}/3rdParty/tiny_dnn)tiny-dnn 搜索我的 rapidjson 或我的项目在 tiny 中搜索时出现的一些冲突-dnn 的 rapidjson。

my_project CMakeLists.txt

我的项目.cpp

0 投票
1 回答
538 浏览

c++ - 为什么我不能在同一个 MS VS 解决方案的两个控制台应用程序中使用 C++ Eigen(仅标头库)?

我用两个控制台应用程序项目制作了一个 Microsoft 视觉解决方案。我可以在一个项目中使用 Eigen 库,只需在属性中声明它,如下所示:

$(ProjectDir)特征\特征3;

我可以使用像“Eigen::Vector3d”等库结构没问题。现在,当我尝试将仅标头库复制到第二个项目文件夹中并尝试为第二个项目文件夹设置相同的属性,并使用该结构时,我会遇到编译错误。

然后,当我不将 Eigen 文件夹复制到第二个文件夹中并简单地尝试从第二个文件夹中引用第一个文件夹时,我会得到另一组编译时错误。

$(SolutionDir)someproject1\Eigen\eigen3;

第二种情况的错误是这样的:

c:\users\alam syed\documents\someproject2.h(11): error C2653: 'Eigen': is not a class or namespace name

c:\users\alam syed\documents\someproject2.h(11): error C2065: 'Vector3f': undeclared identifier

c:\users\alam syed\documents\someproject2.h(11): error C2923: 'std::vector': 'Vector3f' 不是参数 '_Ty' 的有效模板类型参数

c:\users\alam syed\documents\someproject2.h(11): 错误 C2903: 'allocator': 符号既不是类模板也不是函数模板

c:\users\alam syed\documents\someproject2.h(11): error C3203: 'allocator': unspecialized class template can't be used as a template argument for template parameter '_Alloc', 应为真实类型

为什么在同一个解决方案中有两个项目试图在他们的项目文件夹中独立拥有自己的库是不行的?此外,为什么我不能将 Eigen 文件夹从一个引用到第一个?最后,我们如何绕过这个怪癖/设计问题?